01. RocketMQ編譯安裝
介紹
RocketMQ是阿里推出的,現在是Apacha頂級項目。它有兩個優勢:
- 它服務在阿里內部體系里面,比方說用在淘寶里面,支撐了雙十一,它的性能是極高的
- RocketMQ相比其它中間件,因為它是用Java開發的,所以它對Java程序員來說更加友好
其它中間件介紹
| 中間件名稱 | 所用語言 | 是否支持JMS | 優勢 |
|---|---|---|---|
| RocketMQ | Java | 不支持 | 阿里廣泛使用,原生面向集群 |
| ActiveMQ | Java | 支持 | 結構簡單,小項目第一選擇 |
| Kafka | Scala | 未知 | 性能高 |
| RabbitMQ | Erlang | 未知 | 性能高 |
主流的MQ有很多,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka、ZeroMQ等。
之前阿里巴巴也是使用ActiveMQ,隨着業務發展,ActiveMQ IO 模塊出現瓶頸,后來阿里巴巴 通過一系列優化但是還是不能很好的解決,之后阿里巴巴把注意力放到了主流消息中間件kafka上面,但是kafka並不能滿足他們的要求,尤其是低延遲和高可靠性。
所以RocketMQ是站在巨人的肩膀上(kafka)MetaQ的內核,又對其進行了優化讓其更滿足互聯網公司的特點。它是純Java開發,具有高吞吐量、高可用性、適合大規模分布式系統應用的特點。 RocketMQ目前在阿里集團被廣泛應用於交易、充值、流計算、消息推送、日志流式處理、binglog分發等場景。
下載RocketMQ
各個版本的JDK需求說明

通過官網進行下載
下面是當前官網的rocketmq下載地址

將下載好的zip放到linux服務器上面,然后進行解壓
通過Github下載源碼並編譯


將源碼放到服務器上面,使用tar xvf rocketmq-rocketmq-all-4.9.2.tar.gz將源碼進行解壓。
編譯之前先要確保本地服務器上面有maven軟件,沒有的話請自行百度進行安裝,后續我再出相關的教程。
進入到解壓后的目錄,然后使用mvn -Prelease-all -DskipTests clean install -U進行編譯。這里說明一下這個命令的含義,-Prelease-all代表選擇的profile是release-all,-DskipTests代表跳過測試步驟,-U代表強制刷新本地倉庫不存在release版和所有的snapshots版本(其實我也不懂是什么意思,我看這篇博客是這么解釋的)
耐心等待源碼編譯完畢

進入distribution/target目錄,將rocketmq-4.9.2移出來,這個目錄里面就是我們需要的rocketmq的應用
運行rocketmq
rocketmq目錄說明
進入到bin目錄下面,最主要的是兩個程序:mqbroker和mqnamesrv

切換JDK版本
因為rocketmq對JDK版本有要求,如果忘記了JDK的安裝路徑,可以通過命令java -verbose來查詢java的安裝路徑,這個命令最后就會顯示出java的安裝路徑

想要切換JDK版本就是把/etc/profile下面的JAVA_HOME和PATH修改掉,然后用source /etc/profile使配置生效
對於CentOS進行安裝的JDK,好像有alternatives方式來切換java版本,具體只能自行百度了
啟動namesrv
編輯一下runserver.sh,搜索一下-Xms找到內存大小,把內存改小一點。如果不改的話執行后面的命令可能會報錯內存不夠

運行當前目錄下面的./mqnamesrv,然后就能把這個程序啟動起來了

這里說明一下,namesvr你可以把它想象成zookeeper、eureka、nacos,它就是一個注冊中心,后面所有的broker(也就是實際干活的進程)都注冊到它上面
啟動broker
再開啟一個窗口,編輯一下runbroker.sh,搜索一下-Xms找到內存大小,把內存改小一點。如果不改的話,默認啟動要分配8G內存,幾乎所有的機器都會報錯內存不夠

運行當前目錄下面的./mqbroker -n localhost:9876,然后把broker啟動起來,並讓broker連接到namesvr上面。后面的-n localhost:9876必須制定,如果不指定,后面運行生產者腳本的時候會報錯No route info of this topic: TopicTest

這里有可能會報錯Failed to obtain the host name,配置一下/etc/hosts,將自己服務器的IP地址和機器名映射好
broker你可以想象成一個實際干活的人,它里面維護了很多個主題topic,每個主題topic也就是一個消息隊列
運行生產者腳本
再開啟一個窗口,修改一下tools.sh,在最后一句話前面增加export NAMESRV_ADDR=localhost:9876

這句話如果不加的話,執行后面的語句會報錯connect to null failed
運行生產者腳本:./tools.sh org.apache.rocketmq.example.quickstart.Producer

運行消費者腳本
使用命令./tools.sh org.apache.rocketmq.example.quickstart.Consumer,就能把剛才生產的內容都消費掉

rocketmq-dashboard
rocketmq也有一個圖形化的客戶端,原來它是rocketmq-externals下面的一個子模塊,現在單獨成為了一個頂級項目,叫做rocketmq-dashboard,下載源碼,進入目錄,使用命令mvn clean package -Dmaven.test.skip=true進行編譯
編譯完畢之后,進入target目錄,運行java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar
訪問IP:8080打開控制台,剛打開的時候會發現一堆報錯信息,沒關系,切換到OPS選項卡,在NameServerAddressList下面輸入IP:9876,然后按回車,再按UPDATE按鈕,將NameServerAddress配置上去

如果不想很麻煩,每次啟動的時候都配置NameServerAddress,可以運行cp ../src/main/resources/application.properties .,將application.properties文件拷貝到jar包所在的target目錄,然后編輯這個application.properties文件,搜索rocketmq.config.namesrvAddr,將NameSrv地址配置上去,保存完畢文件,重啟應用。
或者也可以使用java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr=IP:9876來啟動應用
下面是RocketMQ-Dashboard里面各個項目的說明
| 項目 | 說明 |
|---|---|
| OPS | 配置NameServer地址 |
| Dashboard | 控制台,可以看到前十的Broker,Broker五分鍾的趨勢,前十的Topic,Topic五分鍾的趨勢 |
| Cluster | 集群 |
| Topic | 主題,主題包括:普通、重試、死信、系統 |
| Consumer | 消費者 |
| Producer | 生產者 |
| Message | 消息 |
| DLQMessage | 死信消息 |
| MessageTrace | 消息軌跡 |
