当前位置: 首页 > news >正文

rocketmq producer和consumer连接不同的集群,如何隔离

问题背景:

producer连接nameserver1,consumer连接nameserver2,

消费者指定了一个MessageQueueStrategy

服务启动的时候,发现消费者,消费不到topic,

发现的方式是在MessageQueueStrategy,debug发现message queue list,所属的topic并不是需要的topic

原因:

MQClientInstance里面的mQClientAPIImpl,它的nameserver的地址是nameserver1,

导致consumer去获取topic的info的时候,导致无法获取到数据。

原因是rocketmq producer和consumer共享一个MQClientInstance。

RocketMQ通过MQClientManager维护全局唯一的MQClientInstance(以clientId作为Key,默认clientId是10.8.0.178@34872这样的形式),同一进程内的Producer和Consumer会复用该实例的网络组件(包括RemotingClient)

计算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();
}

解决方案:

给producer和consumer指定instanceName

producer.setInstanceName("Cluster1Instance");

consumer.setInstanceName("Cluster2Instance");

http://www.xdnf.cn/news/1028161.html

相关文章:

  • 渗透实战:利用XSS获取cookie和密码
  • JDBC基础关键_002_JDBC 增删改
  • ​​Promise代码理解
  • 如何通过Python从DEM文件生成坡度和坡向数据
  • 读取OpenFOAM二进制polyMesh格式的C/C++程序
  • 手搓中文字符编程语言
  • 一文掌握 Windows 文件传输:5 种命令行工具的原理、参数与示例
  • 中国人工智能证书综合信息表(2025年版)
  • 基于混合预编码的同时进行无线信息和功率传输的毫米波海量MIMO-NOMA
  • 如何确保邮件群发不会被标记为垃圾邮件?
  • 【测试开发】函数高阶-闭包、装饰器
  • P25:LSTM实现糖尿病探索与预测
  • Spring AOP与代理模式
  • 利用 Python 爬虫按关键字搜索 1688 商品
  • mvnd-快速打包maven项目
  • 如何使用自动化测试来提高接口测试的效率
  • 1Panel 618 年中大促|不止半价!
  • 《二叉堆》题集
  • Ubuntu VMware虚拟机卡在/dev/sda1
  • ubuntu调整硬盘大小-使用gparted
  • 板子接入mipi摄像头
  • HTML+CSS 动态菜单和登录框
  • 共建数据强国:政务数据共享的双轮革命
  • 【力扣 简单 C】160. 相交链表
  • C++笔记-C++11(三)
  • 【Spring AI】MCP Server实现多实例部署
  • 【灵动Mini-F5265-OB】ADC之片内温度传感器与参考电压获取
  • springboot+vue大文件断点续传
  • 04 dnsmasq 的环境搭建
  • 【MIPI屏幕调试记录】个人记录用