Skip to content

RocketMq 的优势

  • 单机吞吐量高
  • 可用性高: 分布式架构,架构极简
  • 消息可靠性高: 通过参数配置,可以实现消息的 0 丢失
  • 功能完善
  • 基于 Java 语言开发
  • 稳定性高: 有阿里巴巴双十一业务场景的背书,官网号称金融级别的稳定性。

服务架构

RocketMQ 的组成架构

  • NameServer(简单理解成网关): topic 路由控制中心,接受 Broker 信息做路由。在集群模式下,每一个 NameServer 都会保存完整的 Broker 的节点信息
  • Producer: 负责生产消息,发送到 Broket
  • Consumer: 从 Broker 中通过 Topic 订阅消息,
  • Broker(简单理解成业务项目,如 SpringBoot): 负责接受生产者的消息,并且存储下来。同时也会记录消息消费者的元信息 (消费者组,消费者进度,Topic,Queue 等信息)
    • Topic: 针对消息分类的组。
    • Queue : 针对 Topic 的细粒度划分,存放消息的地址引用偏移量
    • CommitLog: 存放具体的完整消息内容
    • 读取消息的实现逻辑: 先去 Queue 上拿到消息的偏移量, 在通过偏移量去 CommitLog 上拿完整消息
    • 针对多个 Topic 信息, 全部写到物理磁盘中的一个 CommitLog 上,提升了 RocketMQ 在多 Topic 场景下的顺序写性能。

运行流程

  1. NameServer 启动
  2. Broker 启动,并且定时上报自己的元数据信息给 NameServer ,此时 NameServer 就有了 Topic 和 Broker 的映射关系
  3. Producer 启动并创建消息发送给 Broker。(实际上是通过 NameServer 绕了一圈,基于 NameServer 给的 Broker 信息去注册)
  4. Consumer 启动,和 Producer 基本一致

同步 CommitLog 文件,以 Broker 为单位,区分主从。

RocketMQ 支持消息过滤: 支持对消息打 Tag,消费者可以选择根据 tag 来进行接收指定的消息进行消费。

RocketMQ 支持事务: 执行一些自定逻辑和 MQ 的发送绑定成原子性。

RocketMQ 支持延迟消息:

RocketMQ 支持私信队列:

RocketMQ 支持消息回溯: 可以调整偏移量、时间等操作

消息分发:

  • 集群消费模式:只会消费一次
  • 广播消费模式: 有多少消费者,就会被消费多少次。

waitingresult.com