容器化后 部署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模式,所以没有问题。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容