RocketMQ源碼

RocketMQ的核心三流程

  • 啟動流程

RocketMQ服務端由兩部分組成NameServer和Broker,NameServer是服務的注冊中心,Broker會把自己的地址注冊到NameServer,生產者和消費者啟動的時候會先從NameServer獲取Broker的地址,再去從Broker發送和接受消息。

  • 消息生產流程

Producer將消息寫入到RocketMQ集群中Broker中具體的Queue。

  • 消息消費流程

Comsumer從RocketMQ集群中拉取對應的消息并進行消費確認。

NameServer源碼分析

NameServer整體流程

NameServer是整個RocketMQ的“大腦”,它是RocketMQ的服務注冊中心,所以RocketMQ需要先啟動NameServer再啟動Rocket中的Broker。
在這里插入圖片描述

  • NameServer啟動
    啟動監聽,等待Broker、Producer、Consumer連接。Broker在啟動時向所有NameServer注冊,生產者發送消息之前從NameServer獲取Broker服務器地址列表,然后根據負載均衡算法從列表中選擇一臺服務器進行消息消費發送。消費者在訂閱某個主題的消息之前從NameServer獲取Broker服務器地址列表(有可能是集群),但是消費者選擇從Broker中訂閱消息,訂閱規則由Broker配置決定。
  • 路由注冊
    Broker啟動后向所有NameServer發送路由及心跳信息。
  • 路由剔除
    一處心跳超時的Broker相關路由信息。NameServer與,每臺Broker服務保持長連接,并間隔10s檢查Broker是否存活,如果檢測到Broker宕機,則從路由注冊表中將其移除。這樣就可以實現RocketMQ的高可用。

NameServer啟動流程

在這里插入圖片描述
啟動NameServer
加載KV配置
構建NRS(Netty Remoting Server)通訊,接受路由、心跳信息
構建定時任務(剔除超時的Broker)

加載KV配置

核心解讀NamesrvController類中createNamesrvController()
在這里插入圖片描述

構建NRS通訊接收路由、心跳信息

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

構建定時任務剔除超時Broker

在這里插入圖片描述
核心控制器會啟動定時任務: 每隔10s掃描一次Broker,移除不活躍的Broker。

Broker每隔30s向NameServer發送一個心跳包,心跳包包含BrokerId,Broker地址,Broker名稱,Broker所屬集群名稱、Broker關聯的FilterServer列表。但是如果Broker宕機,NameServer無法收到心跳包,此時NameServer如何來剔除這些失效的Broker呢?NameServer會每隔10s掃描brokerLiveTable狀態表,如果BrokerLive的lastUpdateTimestamp的時間戳距當前時間超過120s,則認為Broker失效,移除該Broker,關閉與Broker連接,同時更新topicQueueTable、brokerAddrTable、brokerLiveTable、filterServerTable。

在這里插入圖片描述

RocketMQ有兩個觸發點來刪除路由信息:

  • NameServer定期掃描brokerLiveTable檢測上次心跳包與當前系統的時間差,如果時間超過120s,則需要移除broker。

  • Broker在正常關閉的情況下,會執行unregisterBroker指令這兩種方式路由刪除的方法都是一樣的,都是從相關路由表中刪除與該broker相關的信息。

    在消費者啟動之后,第一步都要從NameServer中獲取Topic相關信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213831.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【自動駕駛】2023年度盤點:智能汽車、自動駕駛、車聯網必讀書

2023年,智能駕駛和新能源汽車行業仍然有著肉眼可見的新進展。自動駕駛技術繼續嘗試從輔助駕駛向自動駕駛的過渡,更重要的是相關技術成本的下降。根據《全球電動汽車展望2023》等行業報告,預計2023年平均成本將降至100美元/千瓦時以下&#xf…

知識筆記(四十八)———mysql的優缺點

MySQL作為一個廣泛應用的關系型數據庫管理系統,具有以下優點和缺點: 優點: 開源和免費:MySQL是開源軟件,用戶可以免費獲取和使用它。這使得MySQL成為個人開發者和小型組織的理想選擇。 良好的性能:MySQL經…

成都工業學院Web技術基礎(WEB)實驗八:BOM、DOM基本操作

寫在前面 1、基于2022級計算機大類實驗指導書 2、代碼僅提供參考,前端變化比較大,按照要求,只能做到像,不能做到一模一樣 3、圖片和文字僅為示例,需要自行替換 4、如果代碼不滿足你的要求,請尋求其他的…

【開源】基于Vue.js的就醫保險管理系統

文末獲取源碼,項目編號: S 085 。 \color{red}{文末獲取源碼,項目編號:S085。} 文末獲取源碼,項目編號:S085。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 科室檔案模塊2.2 醫生檔案模塊2.3 預…

最好的貓罐頭品牌有哪些?精選的5款口碑好的貓罐頭推薦!

對于一個剛入門的養貓小白來說,面對市面上琳瑯滿目的貓罐頭選擇確實讓人頭大。我們總想選到營養價值高的罐頭,但又怕貓咪不喜歡吃,也擔心選到不安全的產品。 最好的貓罐頭品牌有哪些?根據我開寵物店7年的經驗,今天我將…

Java基礎——static關鍵字

對象只有在new的時候才會分配空間,有時候我們希望不管是否產生了對象或無論產生了多少對象的情況下,某些特定的數據在內存空間里只有一份,就可以static修飾成員,也稱靜態成員或類成員。 static可修飾屬性、方法、代碼塊、內部類。…

python一點通:參數列表里面有星號 * 什么意思?

在Python類或函數參數列表中,我們有時會看到星號*,它是什么意思呢? 什么是僅限關鍵字參數? Python 3中引入的僅限關鍵字參數是指必須通過其名稱來指定的函數或方法參數。它們避免了由于存在多個參數而引起的混淆,增強…

「哈士奇贈書活動 - 46期」-『技術人修煉之道:從程序員到百萬高管的72項技能(第2版)』

?? 贈書 - 《技術人修煉之道(第2版)》 ?? 內容簡介 本書旨在幫助計算機IT技術人員提升職場核心技能、架構思維、團隊管理能力、商業認知,讓每一位普通的技術從業者,修煉成為"技術職場超級個體”,通過全面升級…

IntelliJ IDEA無公網遠程連接Windows本地Mysql數據庫提高開發效率

🔥博客主頁: 小羊失眠啦. 🎥系列專欄:《C語言》 《數據結構》 《Linux》《Cpolar》 ??感謝大家點贊👍收藏?評論?? 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,…

windows啟動出現 zookeeper此處不應有java

可能是Java 路徑出了問題,這個programFiles直接有空格,沒錯就有空格,筆者一開始以為這么點算什么空格,需要把這個對應的Java文件到別的英文路徑下,并且修改環境變量。就可以啟動的。 還可以啟動方式有很多種&#xff0…

2.2 模型基礎

建模流程 作業 這次搞了10天左右終于把作業做完了。 先是去學習了下如何建模->然后將模型導入Substance Painter里繪制貼圖->最后導入到unity中(雖然最后效果很差),但是回過頭來看整個過程學習到了次時代美術的工作流,思考…

658. 找到 K 個最接近的元素

658. 找到 K 個最接近的元素 Java代碼&#xff1a;滑窗 class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> list new ArrayList<>();for (int i 0; i < arr.length; i) {arr[i] arr[i] - x;}for(i…

【打卡】牛客網:BM63 跳臺階

自己寫的 class Solution { public:/*** 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回方法規定的值即可** * param number int整型 * return int整型*/int jumpFloor(int number) {// write code hereif(number 1)return 1;if(number 2)r…

簡單實現Spring容器(二) 封裝BeanDefinition對象放入Map

階段2: // 1.編寫自己的Spring容器,實現掃描包,得到bean的class對象.2.掃描將 bean 信息封裝到 BeanDefinition對象,并放入到Map.思路: 1.將 bean 信息封裝到 BeanDefinition對象中,再將其放入到BeanDefinitionMap集合中,集合的結構大概是 key[beanName]–value[beanDefintion…

MySQL行鎖范圍分析(行鎖、間隙鎖、臨鍵鎖)

MySQL 中鎖的概念 排它鎖&#xff08;Exclusive Lock&#xff09; X 鎖&#xff0c;也稱為寫鎖&#xff0c;若事務T對對象A加上X鎖&#xff0c;則只允許T讀取和修改A&#xff0c;其他任何事物都不能再對A 加任何鎖&#xff0c;直到T釋放A上的鎖。 SELECT…FOR UPDATE 對讀取的…

風控之Android設備指紋技術

標識性參數——Android ID、IMEI、OAID非標識性參數 非標識性參數——手機運營商 1 設備指紋 簡單來講&#xff0c;設備指紋是指用于標識出該設備的設備特征。可以是單一設備特征&#xff0c;也可以是多種設備特征的組合&#xff0c;以方便風控系統對設備的唯一性進行識別。…

產品入門第一講:Axure的安裝以及基本使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一個在CSDN分享筆記的博主。&#x1f4da;&#x1f4da; ??? &#x1f31f;在這里&#xff0c;我要推薦給大家我的專欄《Axure》。&#x1f3af;&#x1f3af; &#x1f680;無論你是編程小白&#xff0c;還是有…

未來教師行業發展前景

親愛的老師們&#xff0c;你是否對未來教師行業的發展前景感到好奇和期待&#xff1f;作為一名老師&#xff0c;我深知教育行業的重要性和挑戰&#xff0c;但同時也看到了其中蘊含的巨大機遇。 一、技術融合與在線教育 技術的飛速發展正在改變著教育的面貌。在線教育平臺的崛起…

算法基礎十一

組合 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。 示例 1&#xff1a; 輸入&#xff1a;n 4, k 2 輸出&#xff1a; [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2&#xff1a; 輸入&#xff1a;n 1, k 1 輸出&#xff1a;[[1]…

用C語言了解文件那些下 ‘流‘ 事

本篇會加入個人的所謂‘魚式瘋言’??????魚式瘋言:??????此瘋言非彼瘋言,而是理解過并總結出來通俗易懂的大白話,我會盡可能的在每個概念后插入魚式瘋言,幫助大家理解的&#xff0c;可能說的不是那么嚴謹.但小編初心是能讓更多人能接受我們這個概念 前言 &#…