延迟消息原理
场景:超时取消超过30min未支付的订单。使用RocketMQ延迟消息和定时任务进行兜底。
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、直接消费
取消订单