1、下載安裝 RocketMQ 的安裝包分為兩種,二進制包和源碼包。1 下載 Apache RocketMQ 5.3.1的源碼包后上傳到linux https://dist.apache.org/repos/dist/release/rocketmq/5.3.1/rocketmq-all-5.3.1-source-release.zip2 解壓編譯 $ unzip rocketmq-all-5.3.1-source-release.zip $ cd rocketmq-all-5.3.1-source-release/ $ mvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U編譯需要好幾分鐘 [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 03:35 min [INFO] Finished at: 2024-10-24T11:27:32+08:00 [INFO] -------------------------------------------$ cd distribution/target/rocketmq-5.3.1/rocketmq-5.3.1[root@localhost rocketmq-5.3.1]# pwd /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1 [root@localhost rocketmq-5.3.1]# ls benchmark bin conf lib LICENSE NOTICE README.md2 修改啟動參數 2.1修改broker的運行腳本,內存不夠可以適當的修改broker啟動參數[root@localhost bin]# pwd /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/bin[root@localhost bin]# vim runbroker.sh ESC: set number 可以顯示行數找到如下參數:-server -Xms8g -Xmx8g 看著改,只要能啟動就行 改成 -server -Xms2g -Xmx2g 改成-server -Xms1g -Xmx1g 改成-server -Xms256m -Xmx256m101 choose_gc_log_directory 103 JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"2.2 修改nameServer的運行腳本, 修改89和94行-server -Xms4g -Xmx4g -Xmn2g 看著改,只要能啟動就行 改成-server -Xms1g -Xmx1g -Xmn512m 改成-server -Xms2g -Xmx2g -Xmn1g 改成-server -Xms256m -Xmx256m -Xmn128m89 JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"90 JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabl ed -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"91 JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"92 JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"93 else94 JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"2.3 修改代理的端口默認是8080和8081修改成9080和9081,要不然8080可能會和tomcat的端口沖突 [root@localhost conf]# vi rmq-proxy.json {"rocketMQClusterName": "DefaultCluster","remotingListenPort": 9080,"grpcServerPort": 9081 }3 修改broker的配置文件,設置可以自動創建主題。 進入conf目錄下,修改broker.conf文件[root@localhost conf]# pwd /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/conf[root@localhost conf]# vim broker.conf autoCreateTopicEnable=trueautoCreateTopicEnable:自動創建主題,不然需要手動創建出來 namesrvAddr:nameSrv地址可以寫localhost因為nameSrv和broker在一個服務器,也可以用參數指定4 創建日志目錄 /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/ mkdir logs5 啟動NameServer后臺模式啟動,進入到bin目錄,執行如下命令,如果不想后臺啟動的話就進入bin目錄后./mynamesrv /usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/5.1 需要先啟動Name Server nohup sh bin/mqnamesrv > ./logs/namesrv.log &#!/bin/bash nohup sh bin/mqnamesrv > ./logs/namesrv.log & nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log& exit 0[root@localhost rocketmq-5.3.1]# nohup sh bin/mqnamesrv > ./logs/namesrv.log &5.2 查看日志 [root@localhost rocketmq-5.3.1]# cat logs/namesrv.logJava 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:98766、啟動Broker+Proxy NameServer成功啟動后,我們啟動Broker和Proxy。這里我們使用 Local 模式部署,即 Broker 和 Proxy 同進程部署 進入到bin目錄先啟動broker nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log&[root@localhost rocketmq-5.3.1]# nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log&也可以指定配置文件-c conf/broker.conf,用-pc conf/proxyConfig.json來改默認占用的8080和8081端口,改端口看下面的備注。 nohup bin/mqbroker -n 127.0.0.1:9876 -pc conf/proxyConfig.json --enable-proxy &nohup sh bin/mqbroker -c conf/broker.conf -n 192.168.150.50:9876 --enable-proxy> ./logs/broker.log& [root@localhost logs]# cat broker.log Thu Oct 24 15:17:52 CST 2024 rocketmq-proxy startup successfullyhttp://localhost:9999/rocketmq/send[root@localhost logs]# cat broker.log Unrecognized VM option 'UseBiasedLocking' Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.Jdk21偏向鎖被廢棄了,移除這個VM參數 打開rocketmq 的/bin/runbroker.sh,移除UseBiasedLocking參數。JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"或許出現的其他問題 RocketMQ連接異常sendDefaultImpl call timeout裝并啟動好RocketMQ后,在代碼中遠程連接RocketMQ,報以下錯誤:org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException:sendDefaultImpl call timeout at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:588)at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1223)at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1173)at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:214)at com.flying.demo.Producer.main(Producer.java:25)這個錯誤其實是啟動RocketMQ的namesrv,broker沒有指IP。 假如IP是:192.168.1.135 那么啟動namesrv時,用以下方法: nohup sh bin/mqnamesrv -n "192.168.1.135:9876" & 啟動broker時,用以下方法: 修改conf/broker.conf,加入:brokerIP1=192.168.1.135 啟動:nohup ./bin/mqbroker -n localhost:9876 -c conf/broker.conf autoCreateTopicEnable=true &備注:啟動失敗如果是8080端口已經綁定可以修改端口 ========================RocketMQ5.0.0 版本增加了 Proxy 模塊,啟動時默認會用到 8081 端口,當端口被占用時,broker/proxy 將無法啟動,修改 proxy 端口方法如下:(1)在 conf 目錄下修改rmq-proxy.json 文件,注意文件格式為 json,所以內容須為 json 格式;private int remotingListenPort = 8080;private Integer grpcServerPort = 8081;{// 代理監聽端口"remotingListenPort": 9080,// gRPC服務器端口"grpcServerPort": 9081,// 對應namesr的ip,這個單機的時候可以不用加,集群的沒測試過"namesrvAddr":"123.45.67.891:6789;198.76.54.321:6789" }修改代理的端口默認是8080和8081 [root@localhost conf]# vi rmq-proxy.json {"rocketMQClusterName": "DefaultCluster","remotingListenPort": 9080,"grpcServerPort": 9081 }=================================================================7. 關閉服務器和開機自啟 進入到/usr/local/software/rocketmq-all-5.3.1-source-release/distribution/target/rocketmq-5.3.1/rocketmq-5.3.1/目錄執行sh bin/mqshutdown namesrv sh bin/mqshutdown broker8 使用代碼測試[root@localhost bin]# sh mqadmin updateTopic -n 192.168.150.50:9876 -b 192.168.150.50:10911 -t MyTopic -w 4 -r 4create topic to 192.168.150.50:10911 success. TopicConfig [topicName=MyTopic, readQueueNums=4, writeQueueNums=4, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false, attributes={}]-n 192.168.150.50:9876:Name Server地址。 -b 192.168.150.50:10911:Broker地址。 -t MyTopic:主題名稱。 -w 4:寫隊列數量。 -r 4:讀隊列數量。下面的內容還沒測試到9 測試 在進行工具測試消息收發之前,我們需要告訴客戶端NameServer的地址,RocketMQ有多種方式在客戶端中設置NameServer地址,這里我們利用環境變量NAMESRV_ADDR export NAMESRV_ADDR=localhost:9876 sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer10 在rocketmq-dashboard查看消息,也可以直接用程序測試1. docker 鏡像安裝 ① 安裝docker,拉取 rocketmq-dashboard 鏡像 docker pull apacherocketmq/rocketmq-dashboard:latest② docker 容器中運行 rocketmq-dashboard docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.150.50:9876" -p 9999:9999 -t apacherocketmq/rocketmq-dashboard:latest進入容器內部 docker exec -it 05ac89fbf3dd /bin/bash docker cp 05ac89fbf3dd:/rocketmq-dashboard.jar /=============================================================================================2 rocketmq-dashboard的使用 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboardhttp://192.168.150.50:8001