當前位置:編程學習大全網 - 源碼下載 - rocketmq實現延時隊列

rocketmq實現延時隊列

說明:rocketmq實現的延時隊列只支持特定的延時時間段,1s,5s,10s,...2h,不能支持任意時間段的延時

具體實現:rocketmq發送延時消息時先把消息按照延遲時間段發送到指定的隊列中(rocketmq把每種延遲時間段的消息都存放到同壹個隊列中)然後通過壹個定時器進行輪訓這些隊列,查看消息是否到期,如果到期就把這個消息發送到指定topic的隊列中,這樣的好處是同壹隊列中的消息延時時間是壹致的,還有壹個好處是這個隊列中的消息時按照消息到期時間進行遞增排序的,說的簡單直白就是隊列中消息越靠前的到期時間越早

流程圖

源碼分析:

如果想要深入了解的可以看壹下ScheduleMessageService這個類

delayLevelTable定義了延遲級別和延遲時間的對應關系,offsetTable存放延延遲級別對應的隊列消費的offset

使用timer定時器啟動了壹個定時任務,把每個掃描隊列封裝成壹個任務,然後加入到timer中

每個掃描任務主要是把隊列中所有到期的消息都拿出來,並發送到指定的topic下,並把延遲隊列中的消息刪除

總結

優點:設計簡單,把所有相同延遲時間的消息都先放到壹個隊列中,定時掃描,可以保證消息消費的有序性

缺點:定時器采用了timer,timer是單線程運行,如果延遲消息數量很大的情況下,可能單線程處理不過來,造成消息到期後也沒有發送出去的情況

改進點:可以在每個延遲隊列上各采用壹個timer,或者使用timer進行掃描,加壹個線程池對消息進行處理,這樣可以提供效率

  • 上一篇:如何在手機上播放html5,如何播放html5。
  • 下一篇:怎麽使用手機漢化軟件
  • copyright 2024編程學習大全網