RocketMQ详解

消息队列的作用

  1. 异步
  2. 解耦
  3. 削峰

RocketMQ的消息模型

image-20250311201626219
  1. 每个主题下有多个队列
  2. 一个消费者组共同消费一个主题,一个队列只会被一个消费者消费
  3. 不同消费者组中,每个消费者维护消费的队列已消费的位置(offset),防止重复消费

RocketMQ的架构图

image-20250311202049950

NameServer:注册中心,进行Broker管理和路由管理。Broker会将自己的信息注册到NameServer中,消费者和生产者从NameServer中获取路由表然后照着路由表的信息和对应的Broker进行通信。

Broker:消息队列服务器,负责消息的存储、投递、查询,保证高可用性。一个Topic分布在多个Broker上,而每个Broker可以配置多个Topic。

Producer:生产者。

Consumer:消费者。

image-20250311202625113

  1. Broker做了集群和主从部署。slave定时从master同步数据,当master宕机时,slave可以提供消费服务,但不能写入消息。
  2. nameserver做了集群部署,且去中心化。每个broker与所有nameserver保持长连接,并且在每隔 30 秒broker会向所有nameserver发送心跳,心跳包含了自身的 Topic 配置信息。
  3. 在生产者需要向 Broker 发送消息的时候,需要先从 NameServer获取关于 Broker 的路由信息,然后通过 轮询 的方法去向每个队列中生产数据以达到 负载均衡 的效果。
  4. 消费者通过 NameServer 获取所有 Broker的路由信息后,向 Broker 发送 Pull请求来获取消息数据。Consumer可以以两种模式启动—— 广播(Broadcast)和集群(Cluster)。广播模式下,一条消息会发送给 同一个消费组中的所有消费者 ,集群模式下消息只会发送给一个消费者。

RocketMQ功能

普通消息