RocketMQ知識整理與總結

来源:https://www.cnblogs.com/zhyg/archive/2019/02/28/10451518.html
-Advertisement-
Play Games

1、架構 RocketMQ的master broker與master broker沒有任何消息通訊,nameserver之間也同樣沒有消息通信 MQ歷史 由數據結構隊列發展而來 MQ使用場景 非同步處理 解耦 削峰填谷 數據同步 2、隊列 rocketMQ一個主題(topic)包含多個隊列 3、使用 ...


1、架構

 

  RocketMQ的master broker與master broker沒有任何消息通訊,nameserver之間也同樣沒有消息通信

  MQ歷史     

    由數據結構隊列發展而來   

  MQ使用場景

         非同步處理
      解耦
      削峰填谷
      數據同步

2、隊列

  rocketMQ一個主題(topic)包含多個隊列

  

 


3、使用

  生產

    同步(sync)

      預設重試2次總共3次

      預設等待超時時間為3s     

    非同步(async)

      總共重試2次

    單向(oneway)

    Message

      topic:主題名稱

      tag:消息TAG,用於消息過濾對消息的整體分類,比如 topic為物流跟蹤軌跡 ,軌跡包含 攬收 出庫 入庫 派送 簽收,可以分別給這些相同topic不同類型的數據打標簽分類解析處理

      keys:Message索引鍵,多個用空格隔開,RocketMQ可以根據這些key快速檢索到消息對消息關鍵字的提取方便查詢,比如一條消息某個關鍵字是 運單號,之後我們可以使用這個運單號作為關鍵字進行查詢
      waitStoreMsgOK:消息發送時是否等消息存儲完成後再返

      delayTimeLevel:消息延遲級別,用於定時消息或消息重

      User property:自定義消息屬性

    批量發送

      單批次消息不能超過maxMessageSize大小(預設4M)

      客戶端instance:如果instance為預設值DEFAULT的話,RocketMQ會自動將instance設置為IP+進程ID(建議不要設置,預設生成就好),預設最大4M

      鉤子方法:可以執行前後通知

    事物消息

      1分鐘回查一次,預設5次

      事物消息單獨一篇   

  消費

        批量消費總數為32,broker設置

      如果消息消費次數超過maxReconsumeTimes還未成功,則將該消息轉移到一個失敗隊列,等待被刪除

      消息消費超時時間,預設為15分鐘

      消息最大重試次數,預設為16次

      consumeConcurrentlyMaxSpan,併發消息消費時處理隊列最大跨度,預設2000,表示如果消息處理隊列中偏移量最大的消息與偏移量最小的消息的跨度超過2000則延遲50毫秒後再拉取消息

      pullInterval=0,推模式下拉取任務間隔時間,預設一次拉取任務完成繼續拉取

      consumeMessageBatchMaxSize:消息併發消費時一次消費消息條數,通俗點說就是每次傳入MessageListtener#consumeMessage中的消息條數

      RocketMQ消息重試是以消費組為單位,而不是主題,消息重試主題名為%RETRY%+消費組名。消費者在啟動的時候會自動訂閱該主題,參與該主題的消息隊列負載

      同一個消息隊列只會分配給一個消費者,故如果消費者個數大於消息隊列數量,則有些消費者無法消費消息。

      如果延遲級別大於0,則會將消息的主題設置為SCHEDULE_TOPIC_XXXX

      transactionId 事物ID會自己生成

      ConsumeFromWhere

        CONSUME_FROM_FIRST_OFFSET:從頭開始消費

        ONSUME_FROM_TIMESTAMP:從消費者啟動的時間戳對應的消費進度開始消費

        CONSUME_FROM_LAST_OFFSET:從隊列最新偏移量開始消費

        CONSUME_SUCCESS:消費成功

        RECONSUME_LATER:延遲消費,放棄本批次消息消費 類似於continue,如果有重試次數沒有達到最大上限會再次消費

    消息消費模式

      集群模式:預設模式,主題下的同一條消息只允許被其中一個消費者消費

             消費進度存儲在服務端

      廣播模式:主題下的同一條消息將被集群內的所有消費者消費一次

           消費進度存儲在消費者本地

    消息傳輸模式

      拉取消息模式:消費端主動發起拉消息請求

            長輪詢模式使得消息拉取能實現準實時

            從伺服器拉取消息->放入記憶體隊列->提交消息到處理線程池

    併發消費

       推送消息模式:RocketMQ消息推模式的實現基於拉模式

      RocketMQ並沒有真正實現推模式,而是消費者主動向消息伺服器拉取消息,RocketMQ推模式是迴圈向消息服務端發送消息拉取請求

      單獨線程池拉取消息,然後調用監聽api介面

      單獨線程池拉取->記憶體隊列->消息處理線程池處理->移除客戶端記憶體隊列消息並更新進度

    順序消息

      消費過程 消息隊列負載->消息拉取->消息消費->消息消費進度存儲。

      支持局部順序消息消費,也就是保證同一個消息隊列上的消息順序消費

      如果要實現某一主題的全局順序消息消費,可以將該主題的隊列數設置為1,犧牲高性能和可用性

      順序消息在創建消息隊列拉取任務時需要在Broker伺服器鎖定該消息隊列。

      MAX_TIME_CONSUME_CONTINUOUSLY:每次消費任務最大持續時間,預設為60s,切換線程

      順序消息消費的併發度為消息隊列。也就是一個消息消費隊列同一時刻只會被一個消費線程池中一個線程消費。

      達到重試次數上限,轉移到死信隊列,繼續後續消息的消費

    定時消息

      消息發送之後並不立即被消費者消費,而是要等到特定的時間之後才能被消費

      不支持任意時間精度定時發送,只支持配置級別的時間預設為"1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h",delayLevel=1表示延遲1s,delayLevel=2表示延遲5s,依次類推。

      SCHEDULE_TOPIC_XXXX定時消息主題

    消息過濾

      tag

        tag服務端只是驗證了TAG的hashcode,客戶端再次對消息進行tag值對比過濾

      sql(SQL92表達式)

        (官方示例有bug)表達式沒有想象的好用,建議大家接收到消息自己判斷篩選

      類過濾:定製過濾消息

        消息過濾伺服器(不講解)

        consumer->filterserver->broker

    單向消息(One-way)

      其實就是UDP協議的實現

      TCP協議是可靠消息傳輸協議,請求消息都會有相應和校驗,在會話層和傳輸層解決應答

4、填坑方案   

  如果有大量消息積壓

    增加消費者數量

  如果有大量消息積壓並且馬上就到了自動清理的時間

    重新消費導流到新的topic,增大新topic的隊列數量

5、bug   

  netty epoll 4.4.0之前版本沒有實現

6、問題   

  為什麼某條消息報異常會阻塞整個隊列消費    

    ProcessQueue中隊列最大偏移量與最小偏離量的間距,不能超過consumeConcurrentlyMaxSpan,否則觸發流控。

    這裡主要的考量是擔心一條消息堵塞,消息進度無法向前推進,可能造成大量消息重覆消費

7、初始化客戶端註解   

  使用@PostConstruct 由JSR-250提供,在構造函數執行完之後執行,等價於xml配置文件中bean的initMethod

  如果同一個jvm中同時註入生產者和消費者使用bean註解會有異常拋出

8、客戶端支持的驅動程式   

  Java

  Go

  .net

  Php

  c++

  Nodejs

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、首先要安裝nodejs和npm。 下載nodejs安裝,下載地址:https://nodejs.org/en/ 安裝很簡單一路next即可。 安裝完成後可以在cmd視窗輸入node -v 和 npm -v 查看是否安裝成功 2、vue-cli腳手架安裝 CMD命令行輸入:npm install ...
  • sudo -s npm install -g yarn react-native-cli ...
  • 今天碰到的一個比較煩人的問題是,在body上添加事件處理函數,發現在iphone上怎麼也沒辦法觸發事件,找了半天,發現iPhone處理冒泡事件的規則: 1.點擊某個元素; 2.如果這個元素上沒有處理該事件,則繼續向上冒泡,直到body下的子節點為止。如果此時還是沒有元素處理這個事件,則丟棄該事件,不 ...
  • 如果你是一個人在自學前端開發,或者是對前端開發有比較濃厚的興趣正想踏入前端領域,只要你在前端自學路上遇到了自己無法解決的技術難題,那麼儘管將你的疑惑交給我的小伙伴兒們吧,我們都是一群在前端自學路上摸爬滾打的有志青年,希望你可以來和我們共同交流。同時也希望你能獻出自己的一份力,幫助我的小伙伴兒們解決他 ...
  • 原型與原型鏈 javascript 創建對象 類與構造函數是大多數編程語言所擁有的,而借鑒了 C 與 JAVA 的 javascript 也是有類和構造函數的,不過 javascript 的實現不太一樣。 上面的例子中, 就是構造函數, 就是它的實例,但是它對共用性不太好,所以有了原型模式。 原型模 ...
  • 這兩天接觸到一個很有意思的 CSS 屬性 -- box-decoration-break。下麵就一起去一探究竟。 因為 MDN 上關於這個屬性,沒有中文文檔,所以一直在想一個合理貼切的中文翻譯。直譯一下: box -- 盒,可以理解為元素盒模型 decoration -- 裝飾,理解為元素樣式 br ...
  • [TOC] 裝飾器進階 通過上一篇已經知道, 如果還有概念還不理解的請返回裝飾器入門 "裝飾器入門" 裝飾器 實際也是一種函數, 他是 python語言的重要組成部分, 在實際開發中應用也相當廣泛. 正如我們所知, 前面所看到的被裝飾的函數都是最簡單函數格式, 這裡所說的簡單, 是指 ,`或者函數沒 ...
  • http://note.youdao.com/noteshare?id=42fc159d62b041e91c9e60822694db9f&sub=6D019045DECF4CAE8ABF5631C2798DCB ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...