dockerはRocketMQを使用

2740 ワード

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コマンドの起動
ここにバグが発生します.次は解決策を言います.
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を指定するとアクセスできないバグが発生します.
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