1. 程式人生 > >《RocketMq》五、Client-Producer生產者詳解

《RocketMq》五、Client-Producer生產者詳解

Producer的用途大家都很清楚,主要就是生產訊息,那麼分散式模式下與單佇列模式不一樣,如何能夠充分利用分散式的優勢,將生產的訊息分佈到不同的佇列下呢?Rocket-MQ提供了3種不同模式的Producer:

1. NormalProducer

2. OrderProducer

3. TransactionProducer

一、資料結構

1. TopicPublicInfo:僅僅是Producer使用,儲存了messageQueue列表

2.MessageQueue:公用元件,儲存了Queue的標識資訊,<topic、brokerName、queueId>

3.QueueData:包含了Queue的brokerName,queue的讀寫數目等資訊

4.BrokerData:包含了broker的名字,IP,等資訊


二、主要模組

根據<clientId([email protected]), group>每一個DefaultMQProducer有2層的分發:

首先,根據不同的clientId,MQClientManager將給出不同的MQClientInstance;

其次,根據不同的group,MQClientInstance將給出不同的MQProducer和MQConsumer

DefaultMQProducer: 主要儲存了配置資訊,包括clientId,instantName和groupName,以及傳送的網路引數等;

DefaultMQProducerImpl:主要儲存了<topic,TopicPublishInfo>資訊,SendMessageHook、CheckForbiddenHook、RPCHook以及MQClientInstance資訊;

MQClientManager:儲存了<clientId,MQClientInstance>資訊,clientId([email protected]);

MQClientInstance:儲存了producerTable、consumerTable,adminExtTable,NettyClientConfig,<Topic,TopicRouteData>,<brokerName, <brokerId, address>>,RebalanceService, ClientRemotingProcessor, ConsumerStatsManager等資訊;

三、三種處理模式

這三種處理主要是select broker queue的方法不一樣

1. NormalProducer:普通模式;這裡的select呼叫TopicPublishInfo的selectOneMessageQueue,他的機制如下:正常情況下,順序選擇TopicPublishInfo中messageQueueList的queue進行傳送;如果某一個節點發生了超時,則下次選擇queue時,跳過相同的brokerName;

2. OrderProducer:順序模式;假設相同訂單號的支付,退款需要放到同一個佇列,那麼就可以在send的時候,自己實現MessageQueueSelector,根據裡面的arg欄位來選擇queue

3. TransactionProducer:

四、處理邏輯

1. 首先獲取程序pid,將它作為instanceName,系統中所有相同instanceName的Producer和Consumer共用同一個MQClientInstance

2. 將Consumer或者Producer註冊到MQClientInstance

3. 呼叫MQClientInstance.start,啟動如下定時任務

3.1 fetchNameServerAddr:不斷遍歷nameSrv的地址

3.2 updateTopicRouteInfoFromNameServer:從NameSrv遍歷TopicRouteInfo,然後更新producer和consumer的topic資訊

3.3cleanOfflineBroker:清除離線broker

相關推薦

RocketMqClientProducer生產者

Producer的用途大家都很清楚,主要就是生產訊息,那麼分散式模式下與單佇列模式不一樣,如何能夠充分利用分散式的優勢,將生產的訊息分佈到不同的佇列下呢?Rocket-MQ提供了3種不同模式的Producer:1. NormalProducer2. OrderProducer

FastDFS安裝配置部署(三)Storage配置

1、基本配置# is this config file disabled # false for enabled # true for disabled disabled=false# the name of the group this storage server bel

python之函數

list global pan line ice see war -s span 一、函數 1.說白了就是把一組代碼合到一起,可以實現某種功能,需要再用到這種功能的話,直接調用這個函數就行2.函數、方法是一回事3.定義一個函數的格式是:def+函數名+()4.函數必須調用了

js keyupkeypress和keydown事件

rgs spa 小鍵盤 ansi 使用方法 form 單個 sage ges js keyup、keypress和keydown事件都是有關於鍵盤的事件 當一個按鍵被pressed 或released在每一個現代瀏覽器中,都可能有三種客戶端事件。 keydown even

Linux下用戶組文件權限

目錄 管理權限 權限不足 日期 查看 add 綜合案例 天然 width 在linux中的每個用戶必須屬於一個組,不能獨立於組外。在linux中每個文件有所有者、所在組、其它組的概念 - 所有者 - 所在組 - 其它組 - 改變用戶所在的組 所有者 一般為文件的創建者,

數學計算幾何位運算常見問題

splay nsf let pen ide ont display you size ? 矩陣上的問題(3題) Search a 2D Matrix II public int searchMatrix(int[][] matrix, int target) {

二:mysql安裝配置主從復制配置

連接 rom con mon 登錄mysql you drop user sysconf type 作者:NiceCui 本文謝絕轉載,如需轉載需征得作者本人同意,謝謝。 本文鏈接:http://www.cnblogs.com/NiceCui/p/8213723.html

python web開發-flask中responsecookiessession對象使用

編程語言 Python Response響應對象:當一個web請求被服務器處理完後,會返回用戶請求的響應,這時候就要用到響應對象,根據響應給用戶的形式不同,響應對象有以下幾種處理方式1. 如果返回的是一個合法的響應對象,它會從視圖直接返回。2. 如果返回的是一個字符串,響應對象會用字符串數據和默認參數

搜索引擎系列八:solr-部署(solr兩種部署模式介紹獨立服務器模式SolrCloud分布式集群模式

nod 為什麽 用途 serve creat 復制 stand 數據 變量名 一、solr兩種部署模式介紹 Standalone Server 獨立服務器模式:適用於數據規模不大的場景 SolrCloud 分布式集群模式:適用於數據規模大,高可靠、高可用、高並發的場景 二

PhantomJSCasperJS安裝配置圖文

phantom 解壓 tex CA ant lin AS cmd 下載 目前網站主流的加載方式: 一種是同步加載;另一種是異步加載,也即我們常說的用ajax。對於同步加載的網站,普通的爬蟲程序輕松就能搞定。但是對於那種異步請求數據的網站,通常使用selenium+Phant

logback的使用和分彩源碼搭建

日誌 clas file 用戶 堆棧 開發 分割 jee gin 一、logback的介紹  Logback是由log4j創始人設計的另一個開源日誌組件。  logback-core:其它兩個模塊的基礎模塊:五分彩源碼搭建,企 娥:217 1793 408  logback

PHP isset()empty()is_null()的使用區別

erro 警告 說明 variable efi some 布爾值 否則 sse PHP的isset()函數 一般用來檢測變量是否設置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:檢測變量是否設置 返回值: 若變量

Tomcat安裝配置優化及負載均衡

error png cache 新的 ip地址 ace ppa 不同步 工作目錄 一、常見JavaWeb服務器 1、WebLogic:是BEA公司的產品、WebSphereAS:是IBM公司的產品、JBossAS:紅帽公司的產品,可以自行了解 2、Tomcat服務器:S

Zookeeper技術:分布式架構分布式技術分布式事務

cas 序列號 隔離性 googl 管理系 實現 分布式數據庫 備份 分布式文件系 一、分布式架構詳解 1、分布式發展歷程 1.1 單點集中式 特點:App、DB、FileServer都部署在一臺機器上。並且訪問請求量較少 1.2? 應用服務和數據服務拆分 ?特點:App、

圖的儲存結構(鄰接矩陣鄰接表十字連結串列鄰接多重表)

上篇部落格講到,圖狀結構是非常複雜的結構,圖也是非常複雜的,所以圖的儲存就是一個非常重要的部分,因為我們不僅要表示頂點集,還要表示邊集,如何完整準確的表示圖呢,接下來,給大家講解四種圖的儲存方式。 一、鄰接矩陣法 1、定義 我們用一個二維陣列存放頂點間關係(邊或弧)的資料,這個二維陣

Spring(概念篇):SpringSpringMVCSpringBoot以及SpringCloud的概念關係與區別(

Spring與Spring MVC Spring Spring是一個一站式的輕量級的Java開發框架 Spring是一個一站式的輕量級的Java開發框架,核心是控制反轉(IOC)和麵向切面(AOP),針對於開發的WEB層(SpringMVC)、業務層(IOC)、持久層(jdbc Te

1105_nginx入門安裝配置與使用

nginx入門、安裝配置與使用詳解 本文內容: 1. nginx 簡介 2. nginx 安裝配置 3. nginx使用 4.nginx配置location總結及rewrite規則寫法   一、Nginx 的三大功能   1.HTTP伺服器 Nginx

什麽是透明匿名高匿代理?

mar 因此 過程 51cto 大量 .com 數據 示例 應用 隨著大數據的應用越來越廣泛,應用的行業也越來越多,我們每日都可以看到大數據的一些新穎的應用,從而幫助人們從中獲取到真正有用的價值,隨著很多工作的開展,我們需要大量的IP操作,這時為了避免IP被封,使用代理IP

java程式設計師菜鳥進階()oracle基礎)oracle資料庫體系架構

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

分割槽函式Partition By帶行號row_number()排序rank()的用法

partition by關鍵字是分析性函式的一部分,它和聚合函式不同的地方在於它能返回一個分組中的多條記錄,而聚合函式一般只有一條反映統計值的記錄,partition by用於給結果集分組,如果沒有指定那麼它把整個結果集作為一個分組,分割槽函式一般與排名函式一起使用。 準備測試資料: