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,大功告成!!!!!!!!!!!

转载于:https://www.cnblogs.com/pc-m/p/11046848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值