RocketMQ详解
消息队列的作用
- 异步
- 解耦
- 削峰
RocketMQ的消息模型

- 每个主题下有多个队列
- 一个消费者组共同消费一个主题,一个队列只会被一个消费者消费
- 不同消费者组中,每个消费者维护消费的队列已消费的位置(offset),防止重复消费
RocketMQ的架构图
NameServer:注册中心,进行Broker管理和路由管理。Broker会将自己的信息注册到NameServer中,消费者和生产者从NameServer中获取路由表然后照着路由表的信息和对应的Broker进行通信。
Broker:消息队列服务器,负责消息的存储、投递、查询,保证高可用性。一个Topic分布在多个Broker上,而每个Broker可以配置多个Topic。
Producer:生产者。
Consumer:消费者。
- Broker做了集群和主从部署。slave定时从master同步数据,当master宕机时,slave可以提供消费服务,但不能写入消息。
- nameserver做了集群部署,且去中心化。每个broker与所有nameserver保持长连接,并且在每隔 30 秒broker会向所有nameserver发送心跳,心跳包含了自身的
Topic
配置信息。 - 在生产者需要向 Broker 发送消息的时候,需要先从 NameServer获取关于 Broker 的路由信息,然后通过 轮询 的方法去向每个队列中生产数据以达到 负载均衡 的效果。
- 消费者通过 NameServer 获取所有 Broker的路由信息后,向 Broker 发送 Pull请求来获取消息数据。Consumer可以以两种模式启动—— 广播(Broadcast)和集群(Cluster)。广播模式下,一条消息会发送给 同一个消费组中的所有消费者 ,集群模式下消息只会发送给一个消费者。