美文网首页
容器化后 部署RocketMQ consumer insta

容器化后 部署RocketMQ consumer insta

作者: fffhJk | 来源:发表于2019-12-23 09:33 被阅读0次

现象

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

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

相关文章

网友评论

      本文标题:容器化后 部署RocketMQ consumer insta

      本文链接:https://www.haomeiwen.com/subject/axxznctx.html