
上圖是通過RocketMQ原始碼分析一個實作原理方案示意圖,
分為兩個部分:
訊息的寫入
訊息的Schedule
在寫入CommitLog之前,如果是延遲訊息,按照每10分鐘寫入delayfile檔案,對于快到時間執行的,直接寫入時間輪,并且寫入delayfile
,時間輪每秒鐘執行,如果時間到了,就執行佇列中的任務,寫入commitlog檔案中,commitlog會自動寫入 comsumqueue中,然后客戶端就能消費到了,
為什么delayfile檔案保存10分鐘的資料呢,考慮到時間輪不能太多任務在里面,保存10分鐘內的資料,也不會占用太多的記憶體
開源rocketmq延遲佇列實作:
https://gitee.com/venus-suite/rocketmq-with-delivery-time.git
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413691.html
標籤:Java
