官方網站
GitHub
https://github.com/apache/rocketmq
在Linux上安裝Maven
下載Maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
添加阿里雲鏡像
修改maven/conf
目錄下的settings.xml
在mirrors
節點下添加
<mirror>
<id>aliyun-maven</id>
<mirrorOf>*</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置maven環境變量
修改/etc/profile
export M2_HOME=/usr/local/maven
export PATH=$PATH:$M2_HOME/bin
配置java環境變量
export JAVA_HOME="/usr/java/jdk1.8.0_181-amd64"
export CLASS_PATH="$JAVA_HOME/lib"
export PATH=".$PATH:$JAVA_HOME/bin"
環境變量修完執行source /etc/profile
立即生效
查看java安裝目錄
所有類安裝所在目錄
java -verbose
查看JAVA_HOME
echo $JAVA_HOME
Linux下使用Maven編譯Rocket源碼並安裝
Rocketmq4.6+需要jdk1.8環境編譯和運行
下載源碼包
rocketmq-all-4.6.1-source-release.zip
解壓包並編譯源碼
unzip rocketmq-all-4.6.1-source-release.zip
移動文件到指定目錄/usr/local/下
mv rocketmq-all-4.6.1-source-release/ /usr/local/rocketmq-all-4.6.1/
切換到/usr/local/rocketmq-all-4.6.1/目錄下
cd /usr/local/rocketmq-all-4.6.1/
執行meaven編譯源碼命令
mvn -Prelease-all -DskipTests clean install -U
找到編譯后的文件
cd distribution/target/rocketmq-4.6.1/
移動編譯后的文件到指定目錄下
mv rocketmq-4.6.1/ /usr/local/rocketmq-4.6.1/
切換到/usr/local/rocketmq-4.6.1/bin/目錄下
cd /usr/local/rocketmq-4.6.1/bin/
創建日志文件夾
mkdir /usr/local/rocketmq-4.6.1/mylog/rocketmqlogs/
Start Name Server(注冊中心)
nohup sh ./mqnamesrv > /usr/local/rocketmq-4.6.1/mylog/rocketmqlogs/namesrv.log &
查看日志
tail -f /usr/local/rocketmq-4.6.1/mylog/rocketmqlogs/namesrv.log
# 啟動成功標志
# The Name Server boot success. serializeType=JSON
Start Broker(具體服務)
# -n localhost:9876指定對應的namesrv
nohup sh ./mqbroker -n localhost:9876 > /usr/local/rocketmq-4.6.1/mylog/rocketmqlogs/mqbroker.log &
# 執行出錯
# Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot # # allocate memory' (errno=12)
# 可以看出是分配的內存不夠用
原來,執行./mqbroker
其實是執行./runbroker.sh
查看./runserver.sh
和./runbroker.sh
啟動時分配的內存
# runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
發現 runbroker.sh 分配的內存過大
修改啟動時分配的內存
# runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m"
重新啟動./mqbroker
查看日志
tail -f /usr/local/rocketmq-4.6.1/mylog/rocketmqlogs/mqbroker.log
# 啟動成功標志
# The broker[dandanRoot, 192.168.1.113:10911] boot success. serializeType=JSON
發現執行成功
可能出現的另一個錯誤
找不到 host name,此時需要在 /etc/hosts 中配置對應的host
Send & Receive Messages(測試)
在/tools.sh
中添加配置
export NAMESRV_ADDR=localhost:9876
執行測試腳本
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
# 出現錯誤
# org.apache.rocketmq.client.exception.MQClientException: No route info of this topic: TopicTest
# 啟動./mqbroker時要帶上參數 -n localhost:9876,不然連不到注冊中心 namesrv
# 重新啟動
# nohup sh ./mqbroker -n localhost:9876 > /usr/local/rocketmq-4.6.1/mylog/rocketmqlogs/mqbroker.log &
# 發送消息成功
# SendResult [sendStatus=SEND_OK, msgId=C0A8017C00006BC7C0546460AEE203E7, offsetMsgId=C0A8017100002A9F00000000000317BF, messageQueue=MessageQueue [topic=TopicTest, brokerName=dandanRoot, queueId=2], queueOffset=249]
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
# 接收消息成功
# ConsumeMessageThread_9 Receive New Messages: [MessageExt [queueId=3, storeSize=203, queueOffset=200, sysFlag=0, bornTimestamp=1637380057502, bornHost=/192.168.1.113:36340, storeTimestamp=1637380057502, storeHost=/192.168.1.113:10911, msgId=C0A8017100002A9F00000000000279F2, commitLogOffset=162290, bodyCRC=265672385, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250, CONSUME_START_TIME=1637380061726, UNIQ_KEY=C0A8017C00006BC7C0546460AD9E0320, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 56, 48, 48], transactionId='null'}]]
Shutdown Servers
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
控制台rocketmq-console編譯安裝
下載
https://github.com/apache/rocketmq-externals
得到安裝包 rocketmq-externals-master.zip
中文指南
https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md
上傳到服務器並解壓縮
unzip rocketmq-externals-master.zip
得到 rocketmq-externals-master
編譯
進入rocketmq-console
目錄
執行編譯
mvn clean package -Dmaven.test.skip=true
啟動
編譯成功后在rocketmq-console/target
目錄下執行rocketmq-console-ng-1.0.1.jar
啟動時,直接動態添加nameserver
地址或編輯application.properties
添加屬性
java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
啟動成功后訪問服務器8080端口即可
添加--rocketmq.config.namesrvAddr=127.0.0.1:9876
命令的替代方案,在console的頁面中,在opt的NameSvrAddrList中添加192.168.1.113:9876
,按enter鍵,按UPDATE
按鈕即可
pom.xml依賴
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.6.1</version>
</dependency>
安裝啟動常見錯誤
編譯時包無法在mirror上找到 提示502錯誤
原因:網絡不好或maven倉庫服務器出錯
重試即可,或者歡迎鏡像倉庫
發送失敗提示connect to null failed
./tools.sh org.apache.rocketmq.example.quickstart.Producer
22:49:02.470 [main] DEBUG i.n.u.i.l.InternalLoggerFactory - Using SLF4J as the default logging framework
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
java.lang.IllegalStateException: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to
null failed
原因:不知道nameserver
在哪兒
在tools
腳本中添加
export NAMESRV_ADDR=localhost:9876
啟動broker失敗 Cannot allocate memory
原因:jvm啟動初始化內存分配大於物理內存
[root@node-113b bin]# ./mqbroker -n localhost:9876
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed
; error='Cannot allocate memory' (errno=12)#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/rocketmq/bin/hs_err_pid1997.log
修改啟動腳本中的jvm參數
runbroker.sh
broker
runserver.sh
nameserver
默認數值給的都很大,改小即可
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=100m"
啟動broker成功但提示:Failed to obtain the host name
[root@node-113b bin]# ./mqbroker -n localhost:9876
22:30:42.307 [main] ERROR RocketmqCommon - Failed to obtain the host name
java.net.UnknownHostException: node-113b: node-113b: No address associated with hostname
at java.net.InetAddress.getLocalHost(InetAddress.java:1505) ~[na:1.8.0_181]
at org.apache.rocketmq.common.BrokerConfig.localHostName(BrokerConfig.java:189) [rocketmq-common-4.6
.1.jar:4.6.1] at org.apache.rocketmq.common.BrokerConfig.<init>(BrokerConfig.java:38) [rocketmq-common-4.6.1.jar:4
.6.1] at org.apache.rocketmq.broker.BrokerStartup.createBrokerController(BrokerStartup.java:110) [rocketmq
-broker-4.6.1.jar:4.6.1] at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58) [rocketmq-broker-4.6.1.jar:4
.6.1]Caused by: java.net.UnknownHostException: node-113b: No address associated with hostname
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_181]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_181]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_181]
at java.net.InetAddress.getLocalHost(InetAddress.java:1500) ~[na:1.8.0_181]
... 4 common frames omitted
The broker[DEFAULT_BROKER, 192.168.150.213:10911] boot success. serializeType=JSON and name server is localh
ost:9876
原因:無法解析當前的主機名
hosts里添加映射即可
192.168.150.213 node-113b
錯誤:Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to 172.17.0.1:10911 failed
# 外網連接不到指定ip
在broker.conf中配置
brokerIP1=192.168.1.113
namesrvAddr=192.168.1.113:9876
# 關閉啟動mqname服務
sh bin/mqshutdown namesrv
nohup sh bin/mqnamesrv &
# 關閉啟動mqbroker配置
sh bin/mqshutdown broker
nohup sh bin/mqbroker -c conf/broker.conf &
參考文章:https://blog.csdn.net/qq_40202111/article/details/106668494https://blog.csdn.net/qq_40202111/article/details/106668494
控制台rocketmq-console編譯安裝docker版
獲取Docker鏡像
docker pull styletang/rocketmq-console-ng
運行
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 9080:8080 -t styletang/rocketmq-console-ng
訪問
# 使用自己的ip
# 9080是遠程訪問的端口
http://192.168.1.113:9080/
linux日期校准
安裝ntpdate
yum install ntpdate
ntpdate ntp1.aliyun.com