国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于電商場景的高并發(fā)RocketMQ實戰(zhàn)-Consumer端隊列負載均衡分配機制、并發(fā)消費以及消費進度提交

這篇具有很好參考價值的文章主要介紹了基于電商場景的高并發(fā)RocketMQ實戰(zhàn)-Consumer端隊列負載均衡分配機制、并發(fā)消費以及消費進度提交。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????????????
【11來了】文章導讀地址:點擊查看文章導讀!
????????????????

Consumer 端隊列負載均衡分配機制

topic 是有一堆的 queue,而且分布在不同的 broker 上

并且在消費時,將多個 queue 分配給多個 consumer,每一個 consumer 會分配到一部分的 queue 進行消費

每個 consumer 會獲取到 Topic 下包含的 queue 的信息 以及 每個 consumer group 下包含多少的 consumer ,那么 consumer 都使用相同的算法去做一次分配

  • Topic 下包含的 queue 的信息可以在 Broker 中獲取
  • 每個 consumer group 下包含多少了 consumer 的信息也可以在 Broker 獲取,因為每個 consumer 啟動后,都會將 Broker 中進行注冊

Consumer 分配隊列:

Consumer 端隊列的分配是通過 RebalanceService 這個組件實現(xiàn)的,拉取 Topic 的 queue 信息,拉取 consumer group 信息,根據(jù)算法分配 queue,確認自己需要拉取哪些 queue 的消息

RebalanceService 這個組件是在 Broker 中的,主要負責實現(xiàn)消息隊列的動態(tài)負載均衡和自動分配,確保消息隊列在消費者組內(nèi)均勻分配,并在消費者組發(fā)生變化時進行動態(tài)調(diào)整,通過動態(tài)負載均衡和自動分配消息隊列,保證了消費者組在消費消息時的 高效性和可靠性

那么分配好隊列之后,Consumer 就知道自己分配了哪些 queue 了,Consumer 就可以去 Broker 中對應的 queue 進行數(shù)據(jù)的拉取,這里 Consumer 消息的拉取在 RocketMQ 中有兩種實現(xiàn)(DefaultMQPushConsumer、DefaultMQPullConsumer, 但是在底層全部都是通過 pull 拉取消息進行消費的):

  • push 模式:服務端有數(shù)據(jù)后推送給客戶端,實時性很高,但是增加了服務端工作量
  • pull 模式:客戶端主動去服務端拉取數(shù)據(jù),會導致數(shù)據(jù)接收不及時

RocketMQ 的長輪詢:

RocketMQ 中使用了 長輪詢 的方式,兼顧了 push 和 pull 兩種模式的優(yōu)點

長輪詢: 長輪詢本質(zhì)上也是輪詢,服務端在沒有數(shù)據(jù)的時候并不是馬上返回數(shù)據(jù),而是會先將請求掛起,此時有一個長輪詢后臺線程每隔 5s 會去檢查 queue 中是否有新的消息,如果有則去喚醒客戶端請求,否則如果超過 15s 就會判斷客戶端請求超時

Consumer 端并發(fā)消費以及消費進度提交

Consumer 去 Broker 中拉取消息的線程只有一個,拉取到消息之后會將消息存放在 ProcessQueue 中,每一個 ConsumeQueue 都會對應一個 ProcessQueue

消息被拉取到會放在 ProcessQueue 中,等待線程池進行 并發(fā)消息 ,線程池處理消息時,就會調(diào)用到我們在創(chuàng)建生產(chǎn)者時注冊的監(jiān)聽器中的 consumeMessage 方法,在這里會執(zhí)行我們自己定義的業(yè)務邏輯,之后會返回狀態(tài)碼:SUCCESS 或 RECONSUME_LATER 等等,如果消費成功,線程會去 ProcessQueue 中刪除對應的消息,并且會記錄 consumer group 對于 queue 的消費進度 ,以實通過異步提交到 broker 中去,流程圖如下:

基于電商場景的高并發(fā)RocketMQ實戰(zhàn)-Consumer端隊列負載均衡分配機制、并發(fā)消費以及消費進度提交,RocketMQ,java-rocketmq,rocketmq,負載均衡

Consumer 處理失敗時的延遲消費機制:

在 consumer 消費消息失敗的時候,線程池會將消費失敗的消息發(fā)送到 Broker 中,在 Broker 中,對失敗的消息進行一個 Topic 的改寫為:RETRY_Topic_%,會根據(jù)之前的 Topic 名稱進行改寫,改寫后呢,作為一個 延遲消息 重新寫入 Commitlog 和 ConsumeQueue 中,再通過專門處理延遲消息的后臺線程監(jiān)聽延遲消息是否到達延遲時間,當時間到達之后,會將改寫后的 Topic 再重新改寫為原來的 Topic 名稱并寫入 Commitlog,之后等待被消費者再次消費即可文章來源地址http://www.zghlxwxcb.cn/news/detail-775352.html

到了這里,關于基于電商場景的高并發(fā)RocketMQ實戰(zhàn)-Consumer端隊列負載均衡分配機制、并發(fā)消費以及消費進度提交的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包