容器化后 部署RocketMQ consumer instanceName重复?

现象

容器化后,不同的RocketMQ的consumer部署在同一个容器。某开发小年轻和我说会导致client的InstanceName重复。

解决

查看代码

DefaultMQPushConsumerImpl#start

 if (this.defaultMQPushConsumer.getMessageModel() == MessageModel.CLUSTERING) {
                    this.defaultMQPushConsumer.changeInstanceNameToPID();
                }

    public void changeInstanceNameToPID() {
        if (this.instanceName.equals("DEFAULT")) {
            this.instanceName = String.valueOf(UtilAll.getPid());
        }
    }
    public static int getPid() {
        RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
        String name = runtime.getName(); // format: "pid@hostname"
        try {
            return Integer.parseInt(name.substring(0, name.indexOf('@')));
        } catch (Exception e) {
            return -1;
        }
    }

乍一看,发现还真的有问题,然后搜索官方issue
https://github.com/apache/rocketmq/issues/667

再看在docker环境下(使用host模式),获取到的clientIp和pid都是一样的。当然clientIp一样的确切原因还没完全确认

确认我们的docker模式,发现并没有使用host模式,所以没有问题。

这个故事告诉我们,遇到问题,还是要自己查一遍。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页