docker 使用 RocketMQ

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  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

你可能感兴趣的:(docker 使用 RocketMQ)