自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

必須先理解的RocketMQ入門手冊,才能再次深入解讀

開源
RocketMQ是一個純java、分布式、隊列模型的開源消息中間件,前身是MetaQ,是阿里研發(fā)的一個隊列模型的消息中間件,后開源給apache基金會成為了apache的頂級開源項目,具有高性能、高可靠、高實時、分布式特點,

 [[323531]]

RocketMQ是一個純java、分布式、隊列模型的開源消息中間件,前身是MetaQ,是阿里研發(fā)的一個隊列模型的消息中間件,后開源給apache基金會成為了apache的頂級開源項目,具有高性能、高可靠、高實時、分布式特點,

同時,廣泛應用于多個領域,包括異步通信解耦、企業(yè)解決方案、金融支付、電信、電子商務、快遞物流、廣告營銷、社交、即時通信、移動應用、手游、視頻、物聯(lián)網(wǎng)、車聯(lián)網(wǎng)等。

具有以下特點:

  • 能夠保證嚴格的消息順序
  • 提供豐富的消息拉取模式
  • 高效的訂閱者水平擴展能力
  • 實時的消息訂閱機制
  • 億級消息堆積能力

RocketMQ 架構原理分析

RocketMQ 架構

NameServer (名稱服務器):

 

  • 提供輕量級的服務發(fā)現(xiàn)和路由。NameServer接受來自Broker群集的注冊,并提供檢測信號機制以檢查Broker是否還存在
  • 每個NameServer記錄完整的路由信息(Broker 相關 Topic 等元信息,并給 Producer 提供 Consumer 查找 Broker 信息),提供相應的讀寫服務。

Broker(消息服務器): 消息存儲中心,接收來自 Producer 的消息并存儲, Consumer 從這里取得消息

  • 單個Broker節(jié)點與所有的NameServer節(jié)點保持長連接及心跳,并會定時將Topic信息注冊到NameServer,(其底層通信是基于Netty實現(xiàn)的)
  • Broker負責消息存儲,以Topic為維度支持輕量級的隊列,單機可以支撐上萬隊列規(guī)模,支持消息推拉模型。
  • 具有上億級消息堆積能力,同時可嚴格保證消息的有序性

Producer (生產者):

  • 負責產生消息,生產者向消息服務器發(fā)送由業(yè)務應用程序系統(tǒng)生成的消息
  • 生產者支持分布式部署。分布式生產者通過多種負載平衡模式將消息發(fā)送到Broker集群。發(fā)送過程支持快速失敗并且延遲低
  • 三種方式發(fā)送消息:同步、異步和單向

Consumer(消費者):

  • 負責消費消息,消費者從消息服務器拉取信息并將其輸入用戶應用程序
  • 也支持“推和拉”模型中的分布式部署。
  • 它還支持集群使用和消息廣播。它提供了實時消息訂閱機制,可以滿足大多數(shù)消費者的需求。

Broker Server

Broker Server負責消息的存儲和傳遞,消息查詢,HA高可用等,Broker Server幾個主要模塊組成:

Remoting Module(遠程模塊):broker入口,處理來自客戶端的請求

 

Client Manager(客戶端管理):管理client(生產者/消費者)并維護消費者的主題訂閱

Store Service(存儲服務):提供簡單的API供給數(shù)據(jù)庫存儲或查詢消息

HA Service(高可用服務):提供master broker和slave broker之間的數(shù)據(jù)同步功能

Index Service(索引服務):將message建立索引來提供快速的查詢能力

RocketMQ 整體流程

1.啟動 NameServer,NameServer啟動后進行端口監(jiān)聽,等待 Broker、Producer、Consumer 連上來,相當于一個路由控制中心

 

2.Broker 啟動,跟所有的 Namesrv 保持長連接,定時發(fā)送心跳包

  • 心跳包中,包含當前 Broker 信息(IP+端口等)以及存儲所有 Topic 信息
  • 注冊成功后,Namesrv 集群中就有 Topic 跟 Broker 的映射關系

3.收發(fā)消息前,先創(chuàng)建 Topic 。創(chuàng)建 Topic 時,需要指定該 Topic 要存儲在哪些 Broker上。也可以在發(fā)送消息時自動創(chuàng)建Topic

4.Producer 發(fā)送消息

  • 啟動時,先跟 Namesrv 集群中的其中一臺建立長連接,并從Namesrv 中獲取當前發(fā)送的 Topic 存在哪些 Broker 上
  • 然后跟對應的 Broker 建立長連接,直接向 Broker 發(fā)消息

5.Consumer 消費消息

  • 跟其中一臺 Namesrv 建立長連接,獲取當前訂閱 Topic 存在哪些 Broker 上
  • 然后直接跟 Broker 建立連接通道,開始消費消息*RocketMQ的消息領域模型

RocketMQ Message

Topic(主題): 表示消息的第一級類型,是最細粒度的訂閱單位(生產者傳遞消息和消費者提取消息標識)

 

  • 一條消息必須有一個Topic
  • 一個Group可以訂閱多個Topic的消息
  • Topic一般為領域范圍,比如交易消息

Tag(標簽): 表示消息的第二級類型,可以是使用相同的Topic不同的Tag來表示同一業(yè)務模塊的不同任務的消息,比如交易消息又可以分為:交易創(chuàng)建消息,交易完成消息等

  • 助于保持代碼整潔和一致
  • 簡化RocketMQ提供的查詢系統(tǒng)

Message(消息體): 消息是要傳遞的信息。Message中必須包含一個Topic,可選Tag和key-vaule鍵值對

Message Queue(消息隊列): 所有消息隊列都是持久化

  • 一個Topic下可以有多個Queue
  • Queue的引入使得消息的存儲可以分布式集群化,具有了水平擴展能力

Group(組): 分為Producer Group(生產者組)和Consumer Group(消費者組),具有相同角色組成Group

  • 原生產者在交易后崩潰,broker可以聯(lián)系同一生產者組的不同生產者實例以進行提交或回退交易。
  • 消費者組的消費者實例必須具有完全相同的主題訂閱

RocketMQ 特性

Message Model(消息模式):

  • Clustering(集群式):當使用集群消費模式時,MQ 認為任意一條消息只需要被集群內的任意一個消費者處理即可
  • Broadcasting(廣播式):當使用廣播消費模式時,MQ 會將每條消息推送給集群內所有注冊過的客戶端,保證消息至少被每臺機器消費一次

Message Order(消息順序)

  • 使用DefaultMQPushConsumer時,可以決定按順序或同時使用消息

如果指定按順序使用,則消息使用的最大并發(fā)度是使用者組訂閱的消息隊列數(shù)

在此模式下不再保證消息順序

  • Concurrently:同時使用消息時,消息使用的最大并發(fā)性僅受為每個使用方客戶端指定的線程池限制
  • Orderly:有序地使用消息意味著消息的消費順序與生產者為每個消息隊列發(fā)送消息的順序相同。( 如果要處理必須強制執(zhí)行全局順序的情況,請確保您使用的主題只有一個消息隊列)

Message Types(消息類型)

  • 事務消息
  • 順序消息
  • 延遲消息

RocketMQ單機版安裝

1.下載編譯源碼

  1. # 下載$ 
  2. > wget wget http://mirror.bit.edu.cn/apache/rocketmq/4.6.0/rocketmq-all-4.6.0-source- > 
  3. # 解壓$ 
  4. >unzip rocketmq-all-4.7.0-source-release.zip 
  5. > cd rocketmq-all-4.7.0/ 
  6. # 編譯$ 
  7. > mvn -Prelease-all -DskipTests clean install -U 
  8. > cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0 

2.啟動 Name Server

  1. # 啟動 Name Server 服務 
  2. > nohup sh bin/mqnamesrv & 
  3. # 啟動完成后,查看日志$ 
  4. > tail -f ~/logs/rocketmqlogs/namesrv.log 
  5. The Name Server boot success... 

3.啟動 Broker

在 conf 目錄下,RocketMQ 提供了多種 Broker 的配置文件:

  1. # 啟動 Broker服務 
  2. > nohup sh bin/mqbroker -n localhost:9876 & 
  3. # 啟動完成后,查看日志$ 
  4. > tail -f ~/logs/rocketmqlogs/broker.log 
  5. The broker[%s, 172.30.30.233:10911] boot success... 

其中,參數(shù):

  • 通過 -c 參數(shù),配置讀取的主 Broker 配置
  • 通過 -n 參數(shù),設置 RocketMQ Namesrv 地址
  • broker.conf :單主,異步刷盤。
  • 2m/ :雙主,異步刷盤。
  • 2m-2s-async/ :兩主兩從,異步復制,異步刷盤。
  • 2m-2s-sync/ :兩主兩從,同步復制,異步刷盤。
  • dledger/ :Dledger 集群,至少三節(jié)點

4.Send & Receive Messages(消息發(fā)送與接收)

在發(fā)送/接收消息之前,我們需要告知client(生產者/消費者)Name Servers的地址。RocketMQ提供了多種方法來實現(xiàn):

為簡單起見,我們使用環(huán)境變量:NAMESRV_ADDR,如下所示:

  1. # 設置 Name Servers的地址$ 
  2. > export NAMESRV_ADDR=localhost:9876 
  3. # 生產消息$ 
  4. > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer 
  5. SendResult [sendStatus=SEND_OK, msgId= ... 
  6. # 消費消息$ 
  7. > sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer 
  8. ConsumeMessageThread_%d Receive New Messages: [MessageExt... 
  • 在代碼中設置:producer.setNamesrvAddr("ip:port")
  • java屬性配置:rocketmq.namesrv.addr
  • 環(huán)境變量配置:NAMESRV_ADDR
  • HTTP Endpoint

 

責任編輯:武曉燕 來源: Ccww技術博客
相關推薦

2010-02-25 16:29:01

Fedora NFS

2023-09-26 08:01:46

消費者TopicRocketMQ

2020-11-13 16:40:05

RocketMQ延遲消息架構

2020-12-02 08:30:46

MySQL索引哈希表

2022-09-26 08:01:31

線程LIFO操作方式

2022-08-22 08:04:25

Spring事務Atomicity

2018-09-29 10:05:54

深度學習神經(jīng)網(wǎng)絡神經(jīng)元

2023-02-08 07:51:52

DDD領域驅動

2015-08-05 15:46:36

代碼程序員

2009-12-15 14:16:13

Ruby Contin

2025-01-14 08:42:34

IO流程序語句

2022-08-30 13:03:39

prometheusAlert

2024-07-22 13:10:12

2010-10-11 12:10:33

VoIP技術體制

2010-06-08 16:23:22

UML教程

2009-09-25 13:48:17

Hibernate i

2010-09-28 09:33:25

DOM模型

2023-03-14 08:45:25

RocketMQ消息消費

2021-04-07 08:43:09

SpringBootRocketMQ開發(fā)技術

2010-09-28 14:08:28

DOM
點贊
收藏

51CTO技術棧公眾號