17、Rocket MQ快速實戰以及核?概念詳解

??MQ簡介

MQMessageQueue消息隊列。是在互聯?中使??常?泛的—系列服務中間件。 這個詞可以分兩個部分來看,

—是Message:消息。消息是在不同進程之間傳遞的數據。這些進程可以部署在同—臺機器上,也可以?分布在不同機器上。

?是Queue:隊列。隊列原意是指—種具有FI?FO(先進先出)特性的數據結構,是?來緩存??數據的。對于消息中間件產品來說,能不能保證FI?FO特性?尚值得考量。但是,所有消息隊列都是需要具備存?儲消息,讓消息排隊的能??

?義上來說,?只要能夠實現消息跨進程傳輸以及隊列數據緩存,就可以稱之為消息隊列。例如我們常?的QQ?、微信?、阿?旺旺等就都具備了這樣的功能。只不過他們對接的使?對象是??,?我們這?討論的MQ產品?需要對接的使?對象是應?程序。

1、MQ的作?主要有以下三個??:

? (1)異步

例?:?快遞員發快遞,直接到客戶家效率會很低。引?菜?驛站后,快遞員只需要把快遞放到菜?驛站,?就可以繼續發其他快遞去了。客戶再按??的時間安排去菜?驛站取快遞。

作? :異步能提?系統的響應速度?、吞吐量。

?(2)解耦

例?:《Thinking in JAVA》很經典,但是都是英??,我們看不懂,所以需要編輯社,將?章翻譯成其他?語?,?這樣就可以完成英語與其他語?的交流。

作??

1 、服務之間進?解耦,才可以減少服務之間的影響。提?系統整體的穩定性以及可擴展性。

2?、另外,解耦后可以實現數據分發。?產者發送—個消息后,可以由—個或者多個消費者進?消費,并?且消費者的增加或者減少對?產者沒有影響。

?

(3)削峰

例?:??江每年都會漲??,但是下游出??的速度是基本穩定的,所以會漲??。引?三峽?壩后,可以把??儲存起來,下游慢慢排?。

作???以穩定的系統資源應對突發的流量沖擊。

?

??Rocket?MQ產品特點

?1 、Rocket MQ介紹


????????Rocket?MQ是阿里巴巴開源的一個消息中間件,在阿里內部歷經了雙十一等很多高并發場景的考驗,能夠處理億萬級別的消息。2016年開源后捐贈給Apache,現在是Apache的—個頂級項目。
????????早期阿里使用ActiveMQ ,但是,當消息開始逐漸增多后,ActiveMQ的IO性能很快達到了瓶頸。于是, 阿?開始關注Kafka?。但是Kafka是針對日志收集場景設計的,他的高級功能并不是很貼合阿里的業務場景。尤其當他的Topic過多時, 由于Partition文件也會過多,這就會加大文件索引的耗時,會嚴重影響IO性能。于是阿里才決定自研中間件,?最早叫做MetaQ ,后來改名成為Rocket MQ?。最早他所希望解決的最大問題就是多Topic下的IO 性能壓力?。但是產品在阿里內部的不斷改進, Rocket MQ開始體現出一些不一樣的優勢。


2 、Rocket MQ特點

當今互聯?MQ產品眾多,其中,影響?和使?范圍最?的當數Apache?Kafka?RabbitMQ?Apache?Rocket?MQ以及Apache?Plusar。這??產品雖然都是典型的MQ產品,但是由于設計和實現上的—些差異,造成他們適合于不同的細分場景。

優點

缺點

適合場景

Apache?Kafka

吞吐量?常??,性能?常好,集群?可??

會有丟數據的可

能,功能?較單—

?志分析、

?數據采集

Rabbit?MQ

消息可靠性??,功能全??

erlang語?不好定?制。吞吐量?較????低。

企業內部?

規模服務調?

Apache?Pulsar

基于Bookeeper構建,?消息可靠性?常??

周邊?態還有差

距,??前使?的公?司?較少。

企業內部?

規模服務調?

Apache?

Rocket?MQ

?吞吐?、?性能?、?可??。功能全??

客戶端協議豐富。使?java語?開發,???便定制。

服務加載?較慢。

?乎全場

景,特別適

合?融場景

其中Rocket?MQ?,孵化?阿?巴巴。歷經阿?多年雙十一的嚴格考驗,?Rocket?MQ可以說是從全世界最嚴苛的??并發場景中摸爬滾打出來的過硬產品,也是少數?個在?融場景?較適?的MQ產品。從橫向對?來看,Rocket?MQKafkaRabbitMQ相??Rocket?MQ的消息吞吐量雖然和Kafka?還是稍有差距,但是卻?RabbitMQ?很多。在阿?內部,?Rocket?MQ集群每天處理的請求數超過5萬億次,?持的核?應?超過3000??個。?Rocket?MQ最?的優勢就是他天?就為?融互聯????。他的消息可靠性相?Kafka也有了很?的提升,??消息吞吐量相?RabbitMQ也有很?的提升。另外,?Rocket?MQ的?級功能也越來越全??,?播消費?、延遲隊?、死信隊列等等?級功能一應俱全,?甚?某些業務功能?如事務消息,?已經呈現出領先潮流的趨勢。

三、RocketMQ快速實戰

1.快速搭建RocketMQ

RocketMQ的官網地址:?http://rocketmq.apache.org?。在下載頁面可以獲取RocketMQ的源碼包以及運行包。下載頁面地址:https://rocketmq.apache.org/download。

當前最新的版本是5.x,這是一個著眼于云原生的新版本,給 RocketMQ 帶來了非常多很亮眼的新特性。但是目前來看,企業中用得還比較少。因此,我們這里采用的還是更為穩定的4.9.5版本。??

注:在2020年下半年,RocketMQ新推出了5.0的大版本,這對于RocketMQ來說,是一個里程碑式的大版本。在這個大版本中,RocketMQ對整體功能做了一次大的升級。增加了很多非常有用的新特性,也對已有功能重新做了升級。
? 比如在具體功能方面,在4.x版本中,對于定時消息,只能設定幾個固定的延遲級別,而5.0版本中,已經可以指定具體的發送時間了。在客戶端語言方面,4.x版本,RocketMQ原生只支持基于Netty框架的Java客戶端。而在5.0版本中,增加了對Grpc協議的支持,這基本上就解除了對客戶端語言的限制。在服務端架構方面,4.x版本只支持固定角色的普通集群和可以動態切換角色的Dledger集群,而在5.0版本中,增加了Dledger Controller混合集群模式,即可以混合使用Dledger的集群機制以及 Broker 本地的文件管理機制。
? 但是功能強大,同時也意味著問題會很多。所以目前來看,企業中直接用新版本的還比較少。小部分使用新版本的企業,也大都是使用內部的改造優化版本。

?運?只需要下載Binary運?版本就可以了。 當然,源碼包也建議下載下來,后續會進?解讀。運?包下載下??來后,就可以直接解壓,上傳到服務器上。我們這?會上傳到/app/rocketmq?錄。解壓后?個重要的?錄如:

?

默認情況下,?Rocket?MQ建議的運?環境需要?少12G的內存,?這是?產環境?較理想的資源配置。但是,??習階段,如果你的服務器沒有這么?的內存空間,那么就需要做—下調整。進?bin??錄,對其中的runserver.shrunbroker.sh兩個腳本進?—下修改。

使?vi runserver.sh指令,編輯這個腳本,找到下?的—?配置,調整Java進程的內存??。?

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m - XX:MaxMetaspaceSize=320m"

接下來,?同樣調整runbroker.sh中的內存??。?

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
修改為:
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g"

?修改配置時, 注意要根據你的JDK版本調整對應的配置? 。Rocket MQ是—個典型的Java應? ,所以需要 提前安裝JDK 。我們這?采?的是1 .8版本。JDK的安裝過程略。
?產環境不建議調整。這—系列參數實際上就是Rocket MQ的JVM調優結果。

?Rocket?MQ的后端服務分為nameserverbroker兩個服務,關于他們的作??,后?會給你分享。接下來我們 先將這兩個服務啟動起來。

第?步:啟動nameserver服務。?

?

cd /app/rocketmq/rocketmq-all-5.3.0-bin-release
nohup bin/mqnames rv &

指令執?后,會?成—個nohup.out的?志?件。在這個?志?件?如果看到下?這—條關鍵?志,就表示?nameserver服務啟動成功了。

Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and
will likely be removed in a future release.
The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876

?接下來,可以通過jsp指令進?驗證。使?jps指令后,可以看到有—個NamesrvStartup的進程運??,也表示?nameserver服務啟動完成。

第?步:啟動broker服務

broker也是—個Java服務,?只需要調整conf?錄下的broker.conf?件,?進?—些定制。然后就可以啟動了。

具體配置項參?官??檔,?這?盡量?默認配置。

如果你的服務器配置了多張?卡,?建議配置brokerIP1屬性。?如阿?云,騰訊云這樣的云服務器,他們?通常有內??卡和外??卡兩張?卡,那么需要增加配置brokerIP1屬性,指向服務器的外?IP 地址,??樣才能確保從其他服務器上訪問到Rocket?MQ 服務。

在啟動broker服務前,需要先指定NameServer的服務地址。Rocket?MQ可以使?—個NAMESRV_ADDR的環?境變量指定NameServer服務地址。?

export NAMESRV_ADDR= I localhost:9876 I

?9876是nameserver的默認服務端??。

然后也可以?之前的?式啟動broker服務。啟動broker服務的指令是mqbroker?

cd /app/rocketmq/rocketmq-all-5.3.0-bin-release
nohup bin/mqbroker &

?啟動完成后,?同樣檢查nohup.out?志?件,有如下—條關鍵?志,就表示broker務啟動正常了。

The broker [xxxxx] boot success. serializeType=JSON and name server is localhost:9876

?

?1、在實際服務部署時,通常會將Rocket?MQ的部署地址添加到環境變量當中。例如使?vi?~/.bash_profile指令,添加以下內容。

export?ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-5.3.0-bin-release?PATH=$ROCKETMQ_HOME/bin:$PATH

export?PATH

這樣就不必每次進?Rocket?MQ的安裝?錄了。直接可以使?mqnamesrv?mqbroker指令。

2?、停?Rocket?MQ服務可以通過mqshutdown指令進?

mqshutdown?namesrv?# 關閉nameserver服務mqshutdown?broker?# 關閉broker服務

同樣使?jps指令可以檢查服務的啟動狀態。使?jps指令后,可以看到—個名為BrokerStartup的進程,則表示?broker服務啟動完成。?

2?、快速實現消息收發

Rocket?MQ后端服務啟動完成后,就可以啟動客戶端的消息?產者和消息消費者進?消息轉發了。接下來,我?們會先通過Rocket?MQ提供的命令??具快速體驗—下Rocket?MQ消息收發的功能。然后,再動?搭建—個Maven項? ,在項?中使?Rocket?MQ進?消息收發。

(1)命令?快速實現消息收發

1?:通過指令啟動Rocket?MQ的消息?產者發送消息。
cd /app/rocketmq/rocketmq-all-5.3.0-bin-release
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

這個指令會默認往Rocket?MQ中發送1000條消息。在命令?窗?可以看到發送消息的?志:?

?

.....
SendResult [sendStatus=SEND_OK, msgId=C0A841708122246B179D98C9E31103E6,
offsetMsgId=C0A8417000002A9F000000000003AEFE, messageQueue=MessageQueue [topic=TopicTest,
brokerName=192-168-65-112, queueId=1], queueOffset=249]
SendResult [sendStatus=SEND_OK, msgId=C0A841708122246B179D98C9E31203E7,
offsetMsgId=C0A8417000002A9F000000000003AFF0, messageQueue=MessageQueue [topic=TopicTest,
brokerName=192-168-65-112, queueId=2], queueOffset=249]

?這部分?志中,并沒有打印出發送了什么消息。上?Send?Result開頭部分是消息發送到Broker后的結果。最 后兩??志表示消息?產者發完消息后,服務正常關閉了。

2):可以啟動消息消費者接收之前發送的消息?
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

?消費者啟動完成后,可以看到消費到的消息

......
ConsumeMessageThread_please_rename_unique_group_name_4_18 Receive New Messages:
[MessageExt [brokerName=192-168-65-112, queueId=1, storeSize=242, queueOffset=211,
sysFlag=0, bornTimestamp=1725004967502, bornHost=/192.168.65.112:52748,
storeTimestamp=1725004967502, storeHost=/192.168.65.112:10911,
msgId=C0A8417000002A9F0000000000031F4E, commitLogOffset=204622, bodyCRC=47888112,
reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic= ITopicTest I,
flag=0, properties={CONSUME_START_TIME=1725005058184, MSG_REGION=DefaultRegion,
UNIQ_KEY=C0A841708122246B179D98C9E24E034E, CLUSTER=DefaultCluster, MIN_OFFSET=0,
TAGS=TagA, WAIT=true, TRACE_ON=true, MAX_OFFSET=250}, body= [72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 56, 52, 54], transactionId= Inull I}]]

?每—條這樣的?志信息就表示消費者接收到了—條消息。

這個Consumer消費者的指令并不會主動結束,他會繼續掛起,等待消費新的消息。我們可以使?CTRL+C??該進程。?

注:在Rocket?MQ提供的這個簡單示例中并沒有打印出傳遞的消息內容,?是打印出了消息相關的很多重?要的屬性。

其中有?個?較重要的屬性: brokerId,brokerName,queueId,msgId,topic,cluster。這些屬性的作?會在?后續—起分享,?這?你不妨先找—下這些屬性是什么,消費者與?產者之間有什么樣的對應關系。

3?、搭建Java客戶端項?

之前的步驟實際上是在服務器上快速驗證Rocket?MQ的服務狀態,接下來我們動?搭建—個Rocket?MQ的客戶?端應??,在實際應?中集成使?Rocket?MQ

第?步 :創建—個標準的maven項? ,在pom.xml中引?以下核?依賴

?

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>5.3.0</version>
</dependency>

第?步:**就可以直接創建—個簡單的消息?產者

?

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

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

相關文章

設計模式之手寫策略模式實現動態支付(Java實現)

首先&#xff0c;定義一個接口類 import java.util.Map;public interface PayInterface {/*** 支付方法* param amount 支付金額* param paymentInfo 支付信息&#xff08;如卡號、密碼等&#xff09;* return 支付結果*/boolean pay(double amount, Map<String, String>…

Spring Boot 虛擬線程 vs WebFlux:誰更勝一籌?

Spring Boot 作為構建現代 Java 應用程序的強大框架,為開發者提供了多種處理并發和可擴展性的解決方案。其中最受關注的兩種方案是 Spring Boot 虛擬線程(Java 21 引入)和 Spring Boot WebFlux(基于響應式編程)。雖然兩者都致力于優化資源利用率和提升高并發處理能力,但在…

淘寶商品搜索接口|關鍵字獲取商品列表API接入指南

在電商領域&#xff0c;淘寶作為中國最大的電子商務平臺之一&#xff0c;擁有海量的商品資源。對于開發者而言&#xff0c;通過淘寶開放平臺提供的 API 接口&#xff0c;能夠實現與淘寶平臺的深度整合&#xff0c;其中關鍵字搜索商品 API 接口尤為重要。它允許開發者根據特定的…

Centos 離線部署(MQTT)EMOX腳本并設置開機自啟

文件結構 install_emqx.sh #!/bin/bash # Filename: install_emqx.sh # Description: EMQX離線一鍵部署腳本 (針對特殊目錄結構)# 檢查root權限 if [[ $EUID -ne 0 ]]; thenecho "請使用root權限運行此腳本&#xff01;" exit 1 fi# 定義依賴包和安裝路徑 DEP_RPM&…

機器學習基礎:從概念到應用的全面解析

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

【機器學習1】線性回歸與邏輯回歸

?邏輯回歸與線性回歸的主要區別在于理論基礎、應用場景和數學模型。 1 線性回歸 1.1 理論基礎 線性回歸主要用于建模自變量與連續性因變量之間關系的統計方法&#xff0c;試圖利用一條線來擬合自變量與因變量之間的線性關系。 1.2 應用場景 從應用場景來說&#xff0c;適…

小程序 頂部欄標題欄 下拉滾動 漸顯白色背景

![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/3164fd0e6d6848efaa1e87e02c35179e.png 下拉 100px 后 變成漸變成白色 顯示原理 <wd-navbar fixed safeAreaInsetTop :bordered"false":custom-style"background-color: rgba(255, 255, 255, op…

Java底層原理:深入理解類加載機制與反射

一、Java類加載機制 Java類加載機制是Java運行時環境的重要組成部分&#xff0c;它負責將字節碼文件加載到JVM內存中&#xff0c;并將其轉換為可執行的類。類加載機制的實現涉及類加載器&#xff08;ClassLoader&#xff09;、類加載過程和類加載器的層次結構。 &#xff08;…

Android 中查看數據庫內容方式

一、背景 創建的db數據庫&#xff0c;有時候需要查看數據庫中的數據內容,或者查看數據是否有更新到數據等等。這時候就需要查看數據庫的內容。 二、數據庫路徑 博主用的是第三方的greendao數據庫框架,生成的.db文件路徑如下:(路徑僅供參考) /data/data/app_package/database…

unity實現浮動組件

目錄 前言方法后言組件代碼 前言 在unity中&#xff0c;要讓一個物體變得讓人感到輕飄飄的&#xff0c;就可以給一個物體添加上浮動組件。今天我們就來實現它。 方法 我們先來看一下 sin ? \sin sin函數的曲線。 在這條曲線上&#xff0c;隨著 x x x向右移動&#xff0c; y…

Cisco Nexus93240接口帶寬顯示異常高故障- bug

hardware: cisco N93240 software: 9.3(10) 1個萬兆接口&#xff0c;顯示的rate超出幾萬倍 開case查詢&#xff0c;告知是bug&#xff0c;需要版本升級解決。

pyhton基礎【15】函數進階一

目錄 一. 函數進階 1. 默認參數&#xff1a; 2. 關鍵字參數&#xff1a; 3. 可變參數&#xff1a; 4. 裝飾器&#xff1a; 5. 匿名函數lambda&#xff1a; 6. 高階函數&#xff1a; 7. 遞歸函數&#xff1a; 8. 類型注解&#xff1a; 二.函數參數的高級使用 缺…

【軟考高級系統架構論文】論企業應用系統的數據持久層架構設計

論文真題 數據持久層 (Data Persistence Layer) 通常位于企業應用系統的業務邏輯層和數據源層之間,為整個項目提供一個高層、統一、安全、并發的數據持久機制,完成對各種數據進行持久化的編程工作,并為系統業務邏輯層提供服務。它能夠使程序員避免手工編寫訪問數據源的方法…

ubuntu使用 Conda 安裝 pyseer詳細教程

pyseer 是一個用于 微生物全基因組關聯分析(GWAS) 的生物信息學工具。它可以幫助研究者識別微生物(如細菌)中與表型(如耐藥性、毒力、致病性)相關的遺傳變異。 一、安裝mamba conda install -n base -c conda-forge mamba二、創建虛擬環境 conda create -n pyseer-env …

Redis04

redis 一、redis的作用和使用場景 redis是一個內存級的高速緩存數據庫。&#xff08;對比磁盤IO&#xff09; 使用場景&#xff1a;1、并發訪問量大的 2、數據量小 3、修改不頻繁 項目中&#xff1a;1、驗證碼 2、登錄成功用戶信息 3、首頁&#xff08;模塊數據 輪播圖&…

計算機網絡學習筆記:TCP可靠傳輸實現、超時重傳時間選擇

文章目錄 一、TCP可靠傳輸實現二、TCP超時重傳時間選擇 一、TCP可靠傳輸實現 TCP可靠傳輸的實現&#xff0c;主要基于發送方和接收方的滑動窗口&#xff0c;以及確認機制&#xff1a; 發送方在未收到確認&#xff08;ACK&#xff09;前&#xff0c;可以將序號落在發送窗口內的…

Perl 正則表達式

Perl 正則表達式 引言 Perl 正則表達式&#xff08;Regular Expressions&#xff09;是Perl編程語言中一個強大且靈活的工具&#xff0c;用于字符串處理和模式匹配。正則表達式在文本處理、數據驗證、搜索和替換等任務中發揮著至關重要的作用。本文將深入探討Perl正則表達式的…

Security: RSA: 1024 bit 長度已經變得不安全了

文章目錄 參考推薦限制RHEL相關配置man crypto-policies包含的應用使用方法是配置文件include參考 https://csrc.nist.gov/pubs/sp/800/57/pt1/r2/final https://www.linuxquestions.org/questions/linux-security-4/1024-bit-dsa-vs-2048-bit-rsa-4175439131/ https://csrc.n…

第一課:大白話中的機器學習

各位看官好啊!今天咱們來聊一個聽起來高大上但實際上特別接地氣的玩意兒——機器學習。別被這名字嚇到,它其實就是教電腦像人類一樣學習知識的一套方法。想象一下你教你家狗子坐下、握手的過程,機器學習差不多就是這么回事,只不過"學生"換成了電腦。 一、啥是機…

實現 el-table 中鍵盤方向鍵導航功能vue2+vue3(類似 Excel)

實現 el-table 中鍵盤方向鍵導航功能vue2vue3&#xff08;類似 Excel&#xff09; 功能需求 在 Element UI 的 el-table 表格中實現以下功能&#xff1a; 使用鍵盤上下左右鍵在可編輯的 el-input/el-select 之間移動焦點焦點移動時自動定位到對應單元格支持光標位置自動調整…