RocketMQ发布订阅和定时消息

发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都将得到通知。

RocketMQ的消息订阅分为两种模式:

  • Push模式(MQPullConsumer): Broker 主动向消费者推送。
  • Pull模式(MQPushConsumer): 消费者在需要消息时,主动到Broker拉取。

但是,在RocketMQ中,具体实现时,Push和Pull模式都是采用消费端主动从Broker拉取消息。

RocketMQ订阅模式实现原理

  • Push(推模式)

  • Pull(拉模式)

Pull方式里,取消息的过程需要用户自己写。

首先通过打算消费的Topic拿到MessageQueue的集合,遍历MessageQueue集合。

然后针对每个MessageQueue批量取消息,一次取完后,记录该队列下一次要去的开始offset(__consumer_offset),直到取完了,再换另一个MessageQueue。

定时消息

定时消息是指消息发送到Broker后,不能立刻被Consumer消费,要到特定的时间或者等待特定的时间后才能被消费。

如果要支持任意的时间精度,在Broker层面,必须要做消息排序,如果再涉及到持久化,那么消息排序要不可避免的产生巨大性能开销。

RocketMQ支持定时消息,但是不支持任意时间精度,支持特定的Level,例如定时5s,10s,1m等。

Broker定时消息发送逻辑

posted @ 2022-10-07 11:40  snail灬  阅读(1130)  评论(0编辑  收藏  举报