消息队列之Rocketmq 教程

RocketMQ是阿里开源的一款高性能、高可靠、高实时的分布式消息中间件, 目前已经捐赠给Apache基金会,现在已成为 Apache 顶级孵化项目。  

Rocketmq 解决哪些问题?

  • Publish/Subscribe

    发布订阅是消息中间件的最基本功能,rocketmq也是支持的
    
  • 消息优先级

    rocketmq 所有消息是持久化消息,因此不可能按照优先级来排序,
    这样对于系统的开销会很大,因此rocketmq是通过定义不同的队列来实现,
    例如,可以创建普通队列,优先级高的队列, 将不同优先级发送到不同队列即可。
    
  • 消息有序消费,就是消息按发送的顺序来消费消息

  • 消息过虑

    消息过虑支持两种形式
    
    1. Broker端消息过滤,
      优点是减少了对于Consumer无用消息的网络传输;
      缺点是增加了Broker的负担,实现相对复杂。
    
    2. Consumer端消息过滤
      这种过滤方式可由应用完全自定义实现,但是缺点是很多无用的消息要传输到Consumer端。
    
  • 消息持久化

  • 支持分布式事务,目前还除了rocketmq支持,其它的消息队列没有看到有实现这个功能!

当然 rocketmq 解决的问题还有很多,这里不再一 一介绍!

RocketMQ 逻辑部署结构

RocketMQ 逻辑部署图

如上图所示,RocketMQ的逻辑部署结构有Producer和Consumer两个特点。

  • Producer Group (消息生产者组)

    用来表示一个发送消息应用,一个Producer Group下包含多个Producer实例,
    可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个Producer对象。
    一个Producer Group可以发送多个Topic消息,Producer Group作用如下:
    
    标识一类Producer
    可以通过运维工具查询这个发送消息应用下有多个Producer实例发送分布式事务消息时,
    如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。
    
  • Consumer Group (消息消费者级)

    用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,
    可以是多台机器,也可以是多个进程,或者是一个进程的多个Consumer对象。
    
    一个Consumer Group下的多个Consumer以均摊方式消费消息,
    如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。