前言
本來是想寫RocketMQ系列博文第一篇RocketMQ簡介,大致內容包括介紹什么是RocketMQ以及教大家如何安裝RocketMQ的,但是呢?有網友說,學習RocketMQ官網特別難,
博主本著天下沒有難學的技術,帶領大家一起手撕RocketMQ,對于技術人員來說,官網才是第一手資料,解決所有棘手問題的起點,也是終點,
學習任何一項技術的通用步驟,三個W,解決所有問題:
1、首先,問What,了解學習這項技術是干嘛的,能夠解決現實專案中的什么問題?
2、其次,問How,怎么做,如何下載(找到github),安裝,撰寫簡單的HelloWorld,進行實踐
3、最終,問Why,為什么要這么做,原理是什么,架構是什么樣的?
下面我們就用上面的3個W,手撕RocketMQ官網,
概述,什么是RocketMQ
我們找到RocketMQ官網地址:https://rocketmq.apache.org/,
首先,介紹了設計RocketMQ的動機以及原因,阿里初期的訊息佇列使用的ActiveMQ,隨著使用了越來越來的佇列和虛擬主題,遇到了ActiveMQ的IO瓶頸,通過節流,斷路器或降級等方案,嘗試解決問題,但是效果不好,于是研究其他替代方案,但是kafka在低延遲和高可靠性方面不能滿足阿里的業務需求,于是設計了RocketMQ,

官網對RocketMQ,ActiveMQ和Kafka三款MQ產品進行了簡單的對比,內容如下:
RocketMQ vs. ActiveMQ vs. Kafka
下表展示了RocketMQ,ActiveMQ和Kafka(Apache最流行的訊息傳遞解決方案)之間的比較:
| MQ產品 | 客戶端 SDK | 協議和規范 | 有序訊息 | 定時訊息 | 批處理訊息 | 廣播訊息 | 訊息過濾 | 訊息重發 | 訊息存盤 | 訊息回溯 | 訊息優先級 | 高可用性和故障轉移 | 訊息軌跡 | 配置 | 管理和操作工具 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ActiveMQ | Java, .NET, C++ 等 | 推模式,支持 OpenWire,STOMP, AMQP, MQTT, JMS | 獨立消費或獨立佇列可以保證訊息有序 | 支持 | 不支持 | 支持 | 支持 | 不支持 | 使用JDBC以及高性能日志(例如levelDB,kahaDB)支持非常快速的持久性 | 支持 | 支持 | 支持, 依賴存盤,如果使用levelDB 則需要ZooKeeper | 不支持 | 默認配置為低級別,用戶需要優化配置引數 | 支持 |
| Kafka | Java, Scala 等 | 拉模式,支持 TCP | 保證獨立磁區內訊息的有序性 | 不支持 | 支持(通過異步生產者) | 不支持 | 支持, 可以使用Kafka Streams 過濾訊息 | 不支持 | 高性能檔案存盤 | 支持按照偏移量表示 | 不支持 | 支持, 需要ZooKeeper | 不支持 | Kafka使用鍵值對格式進行配置,這些值可以從檔案或以編程方式提供, | 支持,使用終端命令公開核心指標 |
| RocketMQ | Java, C++, Go | 拉模式, 支持TCP,JMS, OpenMessaging | 嚴格確保訊息有序,并可以優雅的擴展 | 支持 | 支持,同步模式以避免訊息丟失 | 支持 | 支持, 基于SQL92的屬性過濾器表示式 | 支持 | 高性能和低延遲的檔案存盤 | 支持,使用時間戳和偏移量兩個指標表示 | 不支持 | 支持, 主從模式,無需其他插件 | 支持 | 開箱即用,用戶只需要注意一些配置 | 支持,豐富Web和終端命令可顯示核心指標 |
如何下載及安裝
在快速開啟中,RocketMQ為我們提供了中文的學習檔案,https://github.com/apache/rocketmq/tree/master/docs/cn
學習RocketMQ需要5個先前條件,
- 推薦使用64位作業系統,建議使用Linux / Unix / Mac;(Windows用戶請參見下面的指南)
- 64位JDK 1.8+;
- Maven 3.2.x;
- Git;
- 適用于Broker服務器的4g +可用磁盤
我們既可以通過下載原始碼編譯的方式,進行構建,部署,也可以從下載鏈接中直接下載已經構建好的工具包進行部署,
> unzip rocketmq-all-4.8.0-source-release.zip
> cd rocketmq-all-4.8.0/
> mvn -Prelease-all -DskipTests clean install -U
> cd distribution/target/rocketmq-4.8.0/rocketmq-4.8.0
Linux
啟動 Name Server
# 1.啟動NameServer
> nohup sh bin/mqnamesrv &
# 2.查看啟動日志
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
啟動 Broker
# 1.啟動Broker
> nohup sh bin/mqbroker -n localhost:9876 &
# 2.查看啟動日志
> tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...
測驗RocketMQ發送和接收訊息
首先要設定環境變數NAMESRV_ADDR
# 1.設定環境變數
> export NAMESRV_ADDR=localhost:9876
# 2.使用安裝包的Demo發送訊息
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
# 3.接收訊息
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
關閉服務器
# 1.關閉Broker
> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
# 2.關閉NameServer
> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
Windows
下載最新的二進制版本,并將zip檔案解壓縮到本地磁盤中,如:D:\rocketmq
添加環境變數
ROCKETMQ_HOME="D:\rocketmq"
NAMESRV_ADDR="localhost:9876"
啟動 Name Server
設定正確的環境變數后,切換到rocketmq的解壓目錄,直接運行
.\bin\mqnamesrv.cmd
啟動 Broker
Open new powershell window, after set the correct environment variable. then change directory to rocketmq type and run:
.\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
測驗RocketMQ發送和接收訊息
確保已經正確配置環境變數,切到rocketmq目錄并運行,
# 1、發送訊息
.\bin\tools.cmd org.apache.rocketmq.example.quickstart.Producer
# 2、接收訊息
.\bin\tools.cmd org.apache.rocketmq.example.quickstart.Consumer
關閉服務器
通常,直接關閉命令列視窗即可,(請勿在生產環境中執行此操作)
注意
問題描述:
RocketMQ默認的虛擬機記憶體較大,啟動Broker如果因為記憶體不足失敗,需要編輯如下兩個組態檔,修改JVM記憶體大小
# 編輯runbroker.sh和runserver.sh修改默認JVM大小 vi runbroker.sh vi runserver.sh
- 參考設定:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
原理是什么?
RocketMQ中文檔案中包含了所有我們需要學習的內容,包括RocketMQ概念與特性,架構設計,RocketMQ最常見各種訊息案例、最佳實踐、集群部署,中文內容,相信大家只要肯付出時間,不斷實踐,RocketMQ就是你永遠的技術堆疊,
總結
如何學習一門技術的技巧,你GET到了嗎?加油吧,小伙子!!!
博主寫作不易,加個關注唄
求關注、求點贊,加個關注不迷路,感謝
點贊是對我最大的鼓勵
↓↓↓↓↓↓
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277001.html
標籤:其他
