RocketMQ架構設計及工作流程

2021-09-25 18:22:27 字數 2462 閱讀 3891

技術架構

主要分為四個部分:

工作流程:

首先啟動 nameserver,等待 broker、producer、consumer 來連線,並提供各種查詢服務。

接著啟動 brokerserver,每隔 30s 定時向所有的 nameserver 傳送心跳包,資訊包括自己的狀態和儲存的 topic 資訊。

nameserver 收到 broker 心跳包後,更新相關資訊,且會每隔 10s 檢查上次 broker 傳送心跳的時間,若超過 120s 就判定 broker 下線,並移除此 broker 所有資訊。

啟動 producer,先隨機和 nameserver 建立長連線,傳送訊息前先需要建立 topic,可以通過控制台也可以選擇傳送時自動建立,從 nameserver 獲取這個主題可以發往的所有 broker 的位址,輪詢佇列並和 broker 建立長連線,然後傳送資料。

broker 收到資料進行儲存,並構建消費佇列和索引檔案。

consumer 跟 producer 類似,啟動後先隨機和 nameserver 建立長連線,獲取訂閱資訊,然後根據這心資訊從 broker 獲取訊息進行消費。

nameserver 啟動流程

使用 commons-cli 解析啟動引數,啟動後預設監聽 9876 埠,啟動遠端通訊服務 remotingserver。

this

.remotingserver =

newnettyremotingserver

(this

.nettyserverconfig,

this

.brokerhousekeepingservice)

;this

.remotingexecutor =

executors.

newfixedthreadpool

(nettyserverconfig.

getserverworkerthreads()

,new

threadfactoryimpl

("remotingexecutorthread_"))

;

註冊預設處理器 defaultrequestprocessor,用於接收客戶端查詢 topic、查詢 broker,接收 broker 註冊、broker 刪除等的請求。

接著啟動乙個定時任務,定期檢查 broker 的心跳。

this

.scheduledexecutorservice.

scheduleatfixedrate

(new

runnable()

},5,

10, timeunit.seconds)

;

nameserver 接收 broker 的註冊,並儲存路由資訊到 routeinfomanager 類中。

private

final hashmap

, list

> topicqueuetable;

private

final hashmap

, brokerdata> brokeraddrtable;

private

final hashmap

, set

>> clusteraddrtable;

private

final hashmap

, brokerliveinfo> brokerlivetable;

private

final hashmap

, list

/* filter server */

> filterservertable;

public

class

queuedata

implements

comparable

public

class

brokerdata

implements

comparable

class

brokerliveinfo

brokerserver 主要提供的功能

producer 訊息傳送流程

訊息生產者啟動

訊息驗證

查詢主題路由資訊

選擇訊息佇列

傳送訊息

consumer 消費訊息流程

訊息消費者啟動

根據負載均衡策略選擇 broker

封裝訊息拉取請求,向 broker 發出請求

broker 接收請求,通過驗證、流控等後,查詢並按照訊息 tag 的 hash 過濾後返回訊息(表示式過濾)

consumer 接收訊息後再次驗證 tag,消費後向 broker 返回消費狀態

broker 儲存消費進度

salesforce 架構設計 從架構設計到架構師

因為碎片化的時間多了,所以開始刷起某乎了,關注了架構相關的板塊,也順手回答了一些問題。發現有很多同道中人正在經歷著我前兩年經歷的階段,對於做架構沒有相對具象的一些理解,更沒有系統化的認識。所以把最近回答的一些內容整理一下,權當記錄,留給3年後的自己 按慣例,容許我裝x開頭 一 架構的定義 在軟體開發...

mysql架構設計 初識mysql架構設計

一 應用系統如何與mysql進行一次互動?最開始接觸jdbc的時候,我們系統如何完成一次sql操作呢?第一步,建立資料庫連線 第二步,操作sql 第三步,釋放連線。但是每次建立與資料庫的連線非常耗時和資源,所以我們加入了連線池的概念。第一步的獲取連線是從連線池中獲取乙個可用的連線,第三步的釋放連線不...

軟體架構設計 二 系統總體架構設計

系統總體架構非常重要,但在表達上都不盡相同,下面介紹幾種常用的系統架構模式,供參考 assf access service biz standard fundation 模式 訪問 服務 業務功能 標準 基礎,對系統架構各個層次均有表達,但部署應用模式需要有單獨說明,如下圖方式組織系統總體架構 lo...