RocketMQ
专业术语
Producer:消息生产者,负责生产消息,一般由业务系统负债生产消息。
Consumer:消息消费者,负责消费消息,一般由后台系统负责异步消费。
Push Consumer:
Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦接收到消息,Consumer立刻回调Listener接口的方法。
Pull Consumer:
Consumer的一种,应用通常主动调用Consumer的拉消息方法,从Broker拉消息,主动权由应用控制。
Producer Group
一类producer的集合名称,这类producer通常发送一类消息,且发送逻辑一致。
Consumer Group
一类consumer的集合名称,这类consumer通常消费一类消息,,且消费逻辑一致。
Broker
消息中转角色,负责存储消息,转发消息,一般也称为Sever,在JMS规范中称为?Provider
广播消费
一条消息被多个consumer消费,即使这些consumer同属于一个ConsumerGroup,消息也会被
ConsumerGroup中的每个consumer消费一次,广播消费中的consumerGroup概念可以认为在消息划分方面无意义。
在CORBA Notification规范中,消费方式都属于广播消费。
集群消费
一个ConsumerGroup 中的consumer实例平均分摊消费消息。例如某个Topic有9条消息,其中一个Consumer Group 有3个实例(可能是3个进程或者3个机器),那么每个实例只消费其中的3条消息。
顺序消费
消费消息的顺序要同发送消息的顺序一致。在RocketMQ中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一队列,这样Consumer就可以按照Producer发送的顺序去消费消息。
集群环境
RocketMQ就是为了分布式而产生的,当然天然支持集群。
RocketMQ的集群模型:
单机模式(M)
Master-Slave模式(M-S)
双Master模式(2M)
双主双从模式(2M-2S)
多主多从模式(NM-NS)
RocketMQ物理部署图

网络部署的特点:
NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义。BrokerId为0表示Master,非0表示Slave.Master也可以部署多个。每个Broker与NameServer集群中的所有节点建立长连接,定是注册Topic信息到所有NameServer.
Producer与NameServer集群中的其中一个节点建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
Comsumer与NameServer集群中的其中一个节点建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
ProducerGroup
用来表示一个发送消息应用,一个ProducerGroup下包含多个Producer实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个Producer对象,一个ProducerGroup可以发送多个Topic消息,ProducerGroup作用如下:
1、标识一类Producer
2、可以通过运维工具查询这个发送消息应用下有多个Producer实例。
3、发送分布式事务消息时,如果Producer中途意外宕机,Broker会主动回调ProducerGroup内的任意一台机器来确认事务状态。
ConsumerGroup
用来表示一个消费消息应用,一个ConsumerGroup下包含多个Consumer实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个Consumer对象,一个ConsumerGroup下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个ConsumerGroup下的每个实例都消费全量数据。