ClientId各种情况默认生成差异

 


 

低版本RocketMq-client

clientId = ip + "@" + pid + ["@" +unitName]

 

高版本RocketMq-client

clientId = ip + "@" + pid + # + 递增的随机数  + ["@" +unitName]

Rocketmq-client 4.9.1 测试发现生产者、消费者启动(即调用start方法后),如果没有改变系统属性(rocketmq.client.name默认是DEFAULT,也就是instanceName的默认值),则clientId生成会加上递增的随机数,所以一个jvm启动默认clientId不会相同了:

 rocketmq-spring

为什么rocketmq-spring同一个项目中,启动多个消费者,clientId不一致呢,这样我们在一个应用中多个消费者其实是对应不同的clientId的,就不会出现只使用第一个启动的MQClientInstance单例对象了。原因如下:

启动注册DefaultRocketMQListenerContainer该Bean时,由于该Bean实现了org.springframework.beans.factory.InitializingBean#afterPropertiesSet方法所以实例设置属性后,会执行该方法实现如下:

 

①方法如下:

 

 ①处,传入参数nameServer(也就是nameServer集群地址:192.168.11.180:9876;192.168.11.181:9876;192.168.11.182:9876)调用工具类的方法获取了InstanceName,工具类方法如下:

 

 

所以得到的InstanceName = nameServer + "@"+ pid + "@" + 递增的随机数 

此时clientId = ip +  nameServer + "@" + pid + "@" + 递增的随机数  + ["@" +unitName]

例子:

192.168.31.182@192.168.11.180:9876;192.168.11.181:9876;192.168.11.182:9876@83370@318623779020133

192.168.31.182@192.168.11.180:9876;192.168.11.181:9876;192.168.11.182:9876@83370@318733279351010

但是生产者并没这么处理,所以生产者采用的当前rocketmq-client版本的默认生成方法生成clientId。

 

 

 

 
 
 
posted @   迷走神经  阅读(710)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示