docker部署rocketmq深度歷險!各種bug帶你解決


首先上一篇博客,主要是按照他的來的。但是絕對比他遇到的bug多多了!!

https://www.jianshu.com/p/412a83c605f2

qq:153574139(可以給配置這個煩惱的朋友一點幫助)嘿嘿

 

第一步就是配置broker和namesrv,其實配置這個不難,就是要搞清楚docker的與虛擬機訪問方式

如果你配置的地址是docker的ip,那么外網是無法訪問的,所以要根據下邊的作者說的,在

broker的conf里面配置ip(也就是虛擬機ip),我的docker運行在虛擬機,運行broker的時候可能會出現一個錯誤,跟java的路經有關,按照網上那個把docker里面的tools的ext文件路徑改一下,

然后運行consle,會出現一個異常,但不影響使用。

輸入命令

 

docker exec -it 61df81345674 ./mqadmin clusterList -n 192.168.152.129:9876

ip是外網的地址,如果出現<192.168.888>連接失敗,請關掉防火牆!!切記!!

出現

 

 

代表配置成功了,可以看到namesrc的broker了,下邊是作者的步驟

1、拉取rocketmq 鏡像

docker pull rocketmqinc/rocketmq

2、拉取rocketmq-console 鏡像

docker pull styletang/rocketmq-console-ng

3、啟動nameserver命令

docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv rocketmqinc/rocketmq sh mqnamesrv 

4、啟動broker命令

這里會出現個bug,下面會說解決辦法。

docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq sh mqbroker -c ../conf/broker.conf 

5、啟動rocketmq-console 命令

docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=xxx.xxx.xxx.xxx:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng 

這里的地址,我指定為外網ip,如果指定127.0.0.1::9876會出現無法訪問的bug

org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <null> failed 

問題:

遇到最大的問題就是,啟動broker時,RocketMQ會指定為內網地址,使用的是172.17.0.3。會導致外網生產者無法連接到broker。報錯信息:

org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.3:10909> failed 

解決辦法:

conf/broker.conf文件增加配置項brokerIP1 = xxx.xxx.xxx.xxx。這里的ip地址指定為外網地址。
並且docker啟動時需要增加命令參數-c ../conf/broker.conf。因為rockerMQ broker默認會選擇內網地址。只有當參數行中有-c參數時才會使用配置文件的參數。這里卡了很長時間。

 if (commandLine.hasOption('c')) { String file = commandLine.getOptionValue('c'); if (file != null) { configFile = file; InputStream in = new BufferedInputStream(new FileInputStream(file)); properties = new Properties(); properties.load(in); properties2SystemEnv(properties); MixAll.properties2Object(properties, brokerConfig); MixAll.properties2Object(properties, nettyServerConfig); MixAll.properties2Object(properties, nettyClientConfig); MixAll.properties2Object(properties, messageStoreConfig); BrokerPathConfigHelper.setBrokerConfigPath(file); in.close(); } } 

如何修改broker.conf文件?

使用docker exec 命令進入容器內,修改broker.conf文件。修改完后,重啟容器。

docker exec -it 116 bash cd ../conf vi broker.conf 

 

 

以上是作者的步驟:

然后我們配置好這個,在我的本機非虛擬機寫好生產者消費者的demo

發現沒有消費,打開控制台里面的消息。輸入topic搜索發現有消息啊

這樣是改完的,以前的說consumer版本過低,消費不到消息可以來這里查

改完了consumer,大功告成!!!!!!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM