分析 rocketmq 如何实现消息定时投递
前言
rocketmq 支持消息定时投递,即 producer 产生消息后, consumer 并不能马上能拉取到,而是经过一段时间后才会被 consumer 拉取。
消息发到 broker 时, borker 先将消息保存到 commit log , 但不会马上写到目标 topic, 它会先写到 SCHEDULE_TOPIC_XXXX 这个特殊的 topic
ScheduleMessageService 定期读 SCHEDULE_TOPIC_XXXX 中的消息,如果已经到期, 就将消息写到原来的 topic, 这样就实现了延时投递的效果。
示例代码
1 |
|
实现代码
写 commit log 时,改变 topic
1 |
|
定时查询到期消息,重新投递
1 |
|