標籤:
RocketMQ3.2.6安裝部署及調用
1、RocketMQ部署架構
所有IP都是127.0.0.1,其中NameServer一個,Broker一個,Producer一個,Consumer一個
2、 RocketMQ環境搭建
(1).下載安裝包 :https://github.com/alibaba/RocketMQ/releases
(2).解壓,並進入bin目錄
(3).啟動name server
(4).啟動broker
(5).啟動完成
3、 RocketMQ調用使用JAR:
4、 RocketMQ一些概念
RocketMQ以Topic來管理不同應用的訊息。對於生產者而言,發送訊息是,需要指定訊息的Topic,對於消費者而言,在啟動後,需要訂閱相應的Topic,然後可以消費相應的訊息。Topic是邏輯上的概念,在物理實現上,一個Topic由多個Queue組成,採用多個Queue的好處是可以將Broker儲存分布式化,提高系統效能。
RocketMQ中,producer將訊息發送給Broker時,需要制定發送到哪一個隊列中,預設情況下,producer會輪詢的將訊息發送到每個隊列中(所有broker下的Queue合并成一個List去輪詢)。
對於consumer而言,會為每個consumer分配固定的隊列(如果隊列總數沒有發生變化),consumer從固定的隊列中去拉取沒有消費的訊息進行處理。
Producer
Producer端(屬於client)的邏輯概述:
producer端的邏輯都比較簡單,將訊息發送到某個Queue中即可,具體發送到那個Queue可以由使用者控制(MessageQueueSelector介面),預設情況下,將輪詢方式選擇Queue。在producer端,會從NameServer將所有Broker的Topic及對應的Queue資訊(即:TopicRoute資訊)拉取到本地,然後根據(brokerName, queueId)組建成一個List。因此在MessageQueueSelector,可以看到所有的Queue資訊。
RocketMQ將topic的訊息以多個Queue來管理,使得其較為容易的就可以進行水平擴充,提供系統吞吐力。這樣分布帶來的問題,就是從全域上不能做到順序性(很多時候也並不需要全域上的順序性)。
RocketMQ提到支援順序訊息,實際上是指基於Queue層級的順序。使用者將某些需要滿足順序的一批訊息(比如電商某個訂單號的一系列後續操作、比如資料庫的某個主鍵的insert、delete、update等操作)發送到固定的某個Queue中,則從這個Queue消費訊息的consumer,針對這一批訊息是順序消費。
問題1:針對順序訊息的隊列,是否可以做到不停服務下的叢集動態擴充?
Consumer
consumer邏輯稍微複雜一點。初步思考,consumer端至少需要處理:
(1) 訊息的擷取
(2) offset(消費進度)的管理與儲存
(3) 叢集消費模式下,Queue的分配問題(rebalance)
RocketMQ對外提供了兩種不同形式的Consumer:PushConsumer和PullConsumer。顧名思義,對於PullConsumer而言,使用者需要主動調用相應的介面去拉取未消費的訊息。對於PushConsumer而言,使用者提供訊息處理的CallBack,有未曾消費的訊息時,會主動回調這個CallBack來處理訊息。雖從使用者角度而言,Consumer存在主動(pull)和被動(push),但RocketMQ本身的broker端僅僅儲存所有的訊息,並不負責push訊息,因此PushConsumer的底層實現也是有一個長串連主動去broker上拉取未消費的訊息,然後回調使用者的callback邏輯。
5、 RocketMQ如何使用
A. 生產者
B. 消費者
C. 控制器中調用
D. 啟動消費者任務。注意:切記不可以在每次發送訊息時,都調用start方法
6、 RocketMQ工作原理
RocketMQ3.2.6安裝部署及調用