rocketMq 延遲訊息介紹

2021-09-19 22:40:30 字數 1302 閱讀 3622

在rocketmq的訊息體系中,很重要的乙個訊息體系是延遲訊息,以前需要定時去實現的任務現在有rocketmq自身幫忙解決了,這篇文章主要是講解清楚延遲訊息的實現細節,延遲訊息的是細節,延遲訊息的實現細節,重要的事情說3遍。

1、訊息先寫入commitlog檔案

2、消費執行緒將資料儲存以schedule_topic_***的topic下面並且以延遲粒度作為queueid區分

3、定時任務掃瞄schedule_topic_***下的每個queue啟乙個執行緒進行消費,到時間後寫到consumequeue當中。

4、參考下面目錄,schedule_topic_***目錄下面以延遲粒度作為queue的區分

5、每個粒度的都會啟動乙個定時任務,消費任務後隔0.1s繼續掃瞄

6、判斷訊息是否到期了通過當前時間點和延遲時間對比

7、真正的訊息儲存在commitlog當中,schedule_topic_***下面的訊息相當於對commitlog立面的存的訊息的偏移量等做了一層包裝,consumequeue裡面的訊息其實是從schedule目錄下獲取得。

延遲訊息佇列目錄

commitlog訊息同步到schedule_topic_***當中

說明:參見defaultmessagestore類

解析延遲粒度

說明:參見defaultmessagestore類。

1、根據不同的粒度啟動掃瞄任務

啟動延遲訊息的定時任務

消費延遲佇列到consumequeue佇列

說明:參見schedulemessageservice類

1、根據時間戳進行對比

定時啟動下一次掃瞄粒度

說明:參見schedulemessageservice類

1、啟動下一次任務掃瞄

RocketMQ 9 訊息堆積與消費延遲

訊息處理流程中,如果consumer的消費速度跟不上producer的傳送速度,mq中未處理的訊息會越來越多 進的多出的少 這部分訊息就被稱為堆積訊息。訊息出現堆積進而會造成訊息的消費延遲。以下場景需要重點關注訊息堆積和消費延遲問題 consumer使用長輪詢pull模式消費訊息時,分為以下兩個階段...

RocketMQ 任意延遲 實現

這麼重要的功能為什麼開源版這麼久還沒有,真的是奇怪到不行了 實現後才發現網上已經有其他方案了,說下我這版實現方案自認的好處吧,後續學習下其他方案一起採長補短 api 直接沿用 阿里商業版,後續上雲還是自建都可以不影響,對企業的發展選擇比較友好 精度可以達到最小的delaylevel,也就是1秒 保持...

RocketMQ訊息型別

普通資訊也叫做無序訊息,簡單來說就是沒有順序的訊息,producer 只管傳送訊息,consumer 只管接收訊息,至於訊息和訊息之間的順序並沒 可能先傳送的訊息先消費,也可能先傳送的訊息後消費。舉個簡單例子,producer 依次傳送 order id 為 1 2 3 的訊息到 broker,co...