🍖 RocketMQ

吞佛童子2022年10月10日
  • 中间件
  • 消息队列
大约 2 分钟

🍖 RocketMQ

1. 组成

Producer

  • 生产者
  • 三种消息发送方式:
    • 同步
      • 消息发送出去后,需要等待服务器响应成功 | 失败,才能继续后面的操作
    • 异步
      • 消息发送出去后,可以继续后续操作,不用等待服务器响应,有回调函数
    • 单向
      • 消息发送出去后,可以继续后续操作,不需要等待服务器响应,无回调函数

Consumer

  • 消费者
  • 两种消费模式:
    • PUSH
    • PULL
  • 两种消费模式:
    • 集群消费
      • 一个队列中的消息只能被集群中的一个消费者消费
      • 若某个消费者挂掉,组内其他消费者会接替它,然后继续消费
    • 广播消费
      • 一个队列中的消息被组内每个消费者消费

NameServer

  • 负责 源数据 的管理,包括对 Topic & 路由信息 的管理
  • 每个 Broker 在启动时,均需向 NameServer 注册,
  • 生产者发送消息前会根据 Topic 去 NameServer 获取对应的 Broker 路由信息
  • 消费者也会定时获取 Topic 的路由信息
  • NameServer 集群之间没有通信

Broker

  • 负责 存储消息,转发消息
  • 每个 Broker 与 所有 NameServer 节点保持 长连接 & 心跳机制
  • Broker 定时将 Topic 信息注册到 NameServer,底层通信 & 连接基于 Netty 实现

MessageQueue

  • 一个 Topic 下的消费可放置在多个 消息队列中,轮询该 Topic 下的所有消息队列然后选择一个消息队列放入
  • 消息队列的引入使得消息的存储可以分布式集群化,提高了水平扩展能力

Topic

  • 消息的第一级类型
  • 每条消息必须有一个 Topic
  • 每个 Topic 可以有 0 | 1 | 多个 生产者 & 消费者

Tag

  • 消息的第二级类型,用于提供额外的灵活性

Group

  • 一个组可以订阅多个 Topic
  • 两种形式:
    • 生产者组
    • 消费者组

Offset

  • 读取每个消息队列中的某条消息,需要知道其偏移量
  • Long 类似数据结构
上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou