延迟消息的源码分析

2021-10-15  本文已影响0人  Britney_z

我们看下MessageStoreConfig 类 默认 private String messageDelayLevel ="1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";

我们看下asyncPutMessage方法,真正存储的时候,topic变成SCHEDULE_TOPIC_XXXX 实际上queueId对应的是延迟级别,例如delaylevel等于10,则queueId等于9。每个queueId则代表一个delayLevel

在创建consumeQueue队列的时候,我们看下checkMessageAndReturnSize这个方法,tagcode生成的方法

发送时间为存储时间+延迟时间

我们看下ScheduleMessageService的executeOnTimeup方法,如果发送时间小于当前时间,则取出消息,将真正的topic commit。

大概100ms 遍历一次

上一篇下一篇

猜你喜欢

热点阅读