rocketmq-延迟消息实现

用过rocketmq的童靴们肯定知道,它的延迟消息的时间不是任意时间片,而是仅支持18个固定的时间段,默认的配置是messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h,分别代表延迟level1-level18,对应的延迟时间可以通过配置修改,下面谈谈具体它是怎么实现的

1 所有的延迟消息到达broker后,会存放到SCHEDULE_TOPIC_XXX的topic下(这个topic比较特殊,对客户端是不可见的,包括使用rocketmq-console,也查不到这个topic)

2 SCHEDULE_TOPIC_XXX这个topic下存在18个队列,每个队列中存放的消息都是同一个延迟级别消息

3 broker端启动了一个timer和timerTask的任务,定时从此topic下拉取数据,如果延迟时间到了,就会把此消息发送到指定的topic下,完成延迟消息

以上就是rocketmq延迟消息的实现步骤,如果大家有兴趣,也可以看看JDK的delayQueue的实现,对标一下

推荐阅读更多精彩内容