RocketMQ延迟消息

190 阅读1分钟

延迟消息原理

场景:超时取消超过30min未支付的订单。使用RocketMQ延迟消息和定时任务进行兜底。

image.png

0、设置延时消息等级

默认支持18个等级的延迟消息。

1、写入CommitLog

生产者写入的消息时,都会将消息写入到CommitLog中。

2、放入对应Queue

根据Topic信息转发入对应Queue,一旦进入Queue中就会被立即消费。由于是延时消息,会放入延迟主题SCHEDULE_TOPIC_XXXX的CosumeQueue中。

3、延时服务消费消息

ScheduleMessageService会在内部创建Timer定时器,根据延时等级消费消息。

4、重新存储到CommitLog中

在1、时会将原topic记录在消息中,所以会重新存储在CommitLog中。

5、重新投放

消息会直接投递到目标Topic的ConsumeQueue中。

6、直接消费

取消订单