RocketMQ訊息消費方式 推拉模式

2021-10-07 04:29:45 字數 973 閱讀 8334

rocketmq訊息消費本質上是基於的拉(pull)模式,consumer主動向訊息伺服器broker拉取訊息。

consumer被分為2類:mqpullconsumer和mqpushconsumer,其實本質都是拉模式(pull),即consumer輪詢從broker拉取訊息。 區別:

mqpushconsumer方式,consumer把輪詢過程封裝了,並註冊messagelistener***,取到訊息後,喚醒messagelistener的consumemessage()來消費,對使用者而言,感覺訊息是被推送(push)過來的。主要用的也是這種方式。

mqpullconsumer方式,取訊息的過程需要使用者自己寫,首先通過打算消費的topic拿到messagequeue的集合,遍歷messagequeue集合,然後針對每個messagequeue批量取訊息,一次取完後,記錄該佇列下一次要取的開始offset,直到取完了,再換另乙個messagequeue。

資料互動有兩種模式:push(推模式)、pull(拉模式)。真正的push和pull的區別:

推模式指的是客戶端與服務端建立好網路長連線,服務方有相關資料,直接通過長連線通道推送到客戶端。其優點是及時,一旦有資料變更,客戶端立馬能感知到;另外對客戶端來說邏輯簡單,不需要關心有無資料這些邏輯處理。缺點是不知道客戶端的資料消費能力,可能導致資料積壓在客戶端,來不及處理。

拉模式指的是客戶端主動向服務端發出請求,拉取相關資料。其優點是此過程由客戶端發起請求,故不存在推模式中資料積壓的問題。缺點是可能不夠及時,對客戶端來說需要考慮資料拉取相關邏輯,何時去拉,拉的頻率怎麼控制等等。

拉模式中,為了保證訊息消費的實時性,採取了長輪詢訊息伺服器拉取訊息的方式。每隔一定時間,客戶端想服務端發起一次請求,服務端有資料就返回資料,服務端如果此時沒有資料,保持連線。等到有資料返回(相當於一種push),或者超時返回。

長輪詢pull的好處就是可以減少無效請求,保證訊息的實時性,又不會造成客戶端積壓。

目前絕大部分的mq都是基於的pull模式。

RocketMQ 訊息消費

訊息消費 難點 如何保證訊息只消費一次?順序消費?消費模式 1 單一消費模式 一條訊息,僅被乙個消費者進行消費。如何進行負載?負載演算法有 a 平均分配。b 平均輪詢分配。c 一致性hash 不推薦 d 根據配置,為消費者指定訊息佇列。e 根據broker進行分配,消費者固定消費指定的broker。...

RocketMQ訊息消費方式 推拉模式

rocketmq訊息消費本質上是基於的拉 pull 模式,consumer主動向訊息伺服器broker拉取訊息。consumer被分為2類 mqpullconsumer和mqpushconsumer,其實本質都是拉模式 pull 即consumer輪詢從broker拉取訊息。區別 mqpushcon...

RocketMQ 訊息消費流程

同乙個消費組內的消費者共同承擔其訂閱主題下訊息佇列的消費。分配演算法 盡量使用 平均分配,平均輪詢分配。分配原則 同乙個訊息消費佇列同一時間只會分配給同乙個消費者,乙個消費者可以分配多個訊息消費佇列。順序訊息的消費存在訊息佇列鎖 1.向broker傳送鎖定該訊息佇列的請求 2.鎖定成功建立該訊息佇列...