1. 发布订阅的基本概念
- 发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。
- RocketMQ 的消息订阅氛围两种模式:
- Push 模式(MQPushConsumer):Broker 主动向消费者推送。
- Pull 模式(MQPullConsumer):消费者在需要消息时,主动到 Broker 拉取。
- 但是,在 RocketMQ 中,具体实现时,Push 和 Pull 模式都是采用消费端主动从 Broker 拉取消息。
2. RocketMQ 订阅模式实现原理
Push(推模式)
Pull(拉模式)
- Pull 方式里,取消息的过程需要用户自己写。
- 首先通过准备消费的 Topic 拿到 MessageQueue 的集合,遍历 MessageQueue 集合。
- 然后针对每个 MessageQueue 批量取消息,一次取完后,记录该队列下一次要取的开始 offset,直到取完了,再换另一个 MessageQueue。
3. 使用订阅模式
4. 定时消息的基本概念
- 定时消息是指消息发送到 Broker 后,不能立即被 Consumer 消费,要到特定的时间点或者等待特定的时间后才能被消费。
- 如果要支持任意的时间精度,在 Broker 层面,必须要做消息排序,如果再涉及到持久化,那么消息排序要不可避免地产生巨大性能开销。
- RocketMQ 支持定时消息,但是不支持任意时间精度,支持特定的 level,例如定时 5s、10s、1m 等。