1. 发布订阅的基本概念


  • 发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。
  • RocketMQ 的消息订阅氛围两种模式:
    • Push 模式(MQPushConsumer):Broker 主动向消费者推送。
    • Pull 模式(MQPullConsumer):消费者在需要消息时,主动到 Broker 拉取。
    • 但是,在 RocketMQ 中,具体实现时,Push 和 Pull 模式都是采用消费端主动从 Broker 拉取消息。

2. RocketMQ 订阅模式实现原理


Push(推模式)

image.png

Pull(拉模式)

  • Pull 方式里,取消息的过程需要用户自己写。
  • 首先通过准备消费的 Topic 拿到 MessageQueue 的集合,遍历 MessageQueue 集合。
  • 然后针对每个 MessageQueue 批量取消息,一次取完后,记录该队列下一次要取的开始 offset,直到取完了,再换另一个 MessageQueue。

3. 使用订阅模式


4. 定时消息的基本概念


  • 定时消息是指消息发送到 Broker 后,不能立即被 Consumer 消费,要到特定的时间点或者等待特定的时间后才能被消费。
  • 如果要支持任意的时间精度,在 Broker 层面,必须要做消息排序,如果再涉及到持久化,那么消息排序要不可避免地产生巨大性能开销。
  • RocketMQ 支持定时消息,但是不支持任意时间精度,支持特定的 level,例如定时 5s、10s、1m 等。

延迟级别

image.png

5. Broker 定时消息发送逻辑


image.png

6. 使用定时消息