栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

RocketMQ.MQClientInstance和close the connection to remote address解决

RocketMQ.MQClientInstance和close the connection to remote address解决

因为业务需要,所以项目需要发消息到两个不同NameServerAddr的RocketMQ

第一个Rocketmq是直接用springboot-rocketmq

第二个Rocketmq是封装了一下,手动创建DefaultMQProduct的

试着发送了消息,两个都显示SEND_OK

但发现消息都跑到了同一个RocketMQ上。

后来看了下源码,发现原因是用了同一个MQClientInstance。

MQClientInstance通过MQClientManager获取得到,MQClientManager通过ClientID判断当前MQClientInstance存不存在,存在则不生成。

ClientID的生成规则:

org.apache.rocketmq.client.ClientConfig的buildMQClientId方法
  public String buildMQClientId() {
        StringBuilder sb = new StringBuilder();
        sb.append(this.getClientIP());
        sb.append("@");
        sb.append(this.getInstanceName());
        if (!UtilAll.isBlank(this.unitName)) {
            sb.append("@");
            sb.append(this.unitName);
        }

        return sb.toString();
    }

因为DefaultMQProducer extends ClientConfig,所以我在第二个RocketMQ手动创建DefaultMQProducer时,指定了unitName,这样二个Rocketmq的ClientID就不一样,消息就不会发到同个MQ上了.

第二  因为项目跟第二个RocketMQ在不同的网段上,无法通过内网访问,运维用了一个公网IP跟第二个RocketMQ的内网IP及几个端口都做了映射。但是在连接时,依然会报

RemotingConnectException: connect to <内网IP:10911> failed

连接到第二个RocketMQ所在服务器,打开对应目录的conf/broker.conf文件 

指定brokerIP1为外网地址,据说就可以解决这个问题。但这个解决方案未尝试,因为有很多部门都连这个MQ,不好改IP。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号