Rocketmq5。0客户端如何发现Namserver地址源
源码版本rocketmq:release5。0。0生产者一般使用DefaultMQProducerproducernewDefaultMQProducer(PRODUCERGROUP);producer。setNamesrvAddr(DEFAULTNAMESRVADDR);producer。start();如何设置NameServer地址
以下方式由高到底通过java启动参数设置,比如通过设置环境变量System。setProperty(MixAll。NAMESRVADDRPROPERTY,127。0。0。1:9876);通过设置服务器环境变量(Linux)n127。0。0。1:9876通过代码设置,比如producer。setNamesrvAddr(DEFAULTNAMESRVADDR);通过HTTP服务来设置,当上面都没有设置,会向一个HTTP地址发送请求来获取NameServer地址,默认的URL是http:jmenv。tbsite。net:8080rocketmqnsaddr(淘宝的测试地址),我们可以通过设置系统参数rocketmq。namesrv。domain来覆盖jmenv。tbsite。net的值,通过设置rocketmq。namesrv。domain。subgroup参数来覆盖nsaddr的值
可以看到4通过设置HTTP服务获取NameServer的地址是最麻烦的,相当于自己还要出一个获取获取NameServer的接口,但是他是唯一支持动态增加NameServer,不用重启其他组件的方式源码分析
我们现在通过源码方式分析上面的几种设置方式
这里的ClientConfig实际就是DefaultMQProducer,也就是我们发送消息的第一步,创建一个DefaultMQProducerSystem。setProperty(MixAll。NAMESRVADDRPROPERTY,10。10。10。1:9999);DefaultMQProducerproducernewDefaultMQProducer(PRODUCERGROUP);
通过DefaultMQProducer的构造方法我们可以看到namesrvAddr的默认值是通过NameServerAddressUtils。getNameServerAddresses()
注意这里的DefaultMQProducer是继承了DefaultMQProducer
我们看看NameServerAddressUtils。getNameServerAddresses()方法的具体实现
可以看到首先通过获取环境变量,其次是获取系统环境变量
这里就解释了我们的1、2优先级。看到了1、2的方法也很容易证实3的设置方式了,默认值是1、2,如果我们设置了就是3的设置方式可以看到这里的的namesrvAddr地址的获取主要是通过clientConfig获取的,而clientConfig的构造就是通过DefaultMQProducer构造的(前面分析的),而我们就可以通过在启动Product的时候设置比如DefaultMQProducerproducernewDefaultMQProducer(PRODUCERGROUP);producer。setNamesrvAddr(nameserver1ip:9876;nameserver2ip:9876);
可以看到clientConfig就是在这里通过clientConfig构造的
但是这里的clientConfig就是DefaultMQProducer,我们可以通过debug的方式去确认
这里可以看到就验证了我们说的通过代码设置。
我们继续向下看发现在product启动这里会去通过clientConfig获取namesrvAddr,如果我们之前的代码里面没有设置namesrvAddr的地址,那这里就会为空,然后就通过fetchNameServerAddr去获取namesrvAddr的地址
进到方法fetchNameServerAddr里面我们会发现是通过TopAddressing类的fetchNSAddr方法
我们看看
这里核心就是这个方法returnfetchNSAddr(true,3000);
我们进去看看
可以看到这里通过http去获取namesrvAddr地址,url的获取是通过this。wsAddr;获取的,所以我们重点看看wsAddr如何初始化的
可以看到是通过MixAll。getWSAddr()的方法获取的,我们看看getWSAddr方法
阿里云onsclinetbus直接设置的是NAMESRVADDR吗
从上面我们可以确认最好的方式是通过http方式获取namesrvAddr地址,那么为什么我们使用阿里云的onsclinet是这种方式呢PropertiespropertiesnewProperties();properties。put(PropertyKeyConst。AccessKey,aliMQAccessKey);properties。put(PropertyKeyConst。SecretKey,aliMQSecretKey);properties。put(PropertyKeyConst。NAMESRVADDR,domainEventNameSrv);returnONSFactory。createProducer(properties);
咋看好像是直接设置了NAMESRVADDR地址,其实我们随便看看源码发现他也是设置的是wsAddr地址
总结
这里我们通过源码的方式验证了rocketmqproduct获取namesrvAddr的几种方式,其中最推荐的还是通过HTTP服务来获取,因为可以自由扩容
Steam史低!巫师3次世代解禁时间公布!R星亲自操刀GTA三部曲!Steam每日特惠赛博朋克207750Steam售价298折后149(史低)截止时间12月13日即将截止支持简体中文好评率92短评亚当众锤除了些比较小的bug之外剧情还是蛮对味儿,
光遇攻略全图全季节先祖回归攻略晨岛篇大家好!我是洋洋。最近Aurora的演唱会真是让人看的激情澎湃。作为一个光遇两年玩家,面对近四千人的房间,也不免感受到视觉上的冲击,但是你注意到小光在演唱会的通告上那隐藏的通知了吗
弈仙牌抢先评测仙侠风打牌,却玩出了自走棋的味道与人斗,其乐无穷。说来有趣,在玩到弈仙牌的时间节点上,我正沉迷于Dota2游廊的技能大乱斗,享受构筑体系自定义技能释放顺序的乐趣。在愈发懒散的年纪,将操作放权给AI,稀释操作对局面
又一个乔治娜?身材也对味儿来咯来咯,今天咱们依旧在足球圈晃悠,英格兰球员拉姆斯代尔和他的未婚妻。拉姆斯代尔的未婚妻名叫GeorginaIrwin,是英国一家航空公司的空乘。Georgina比拉姆斯代尔大两岁
美国即将宣布重大科学突破,这是全人类的希望,中国要加倍努力一直以来我们都在报道中国取得各项的科技突破其实这些科技突破都是中国相对于西方国家而言。然而以美国为代表的西方国家却依然是世界科技的领导者,这一点我们不得不承认我们与美国之间存在的差
君乐宝荣获2022年香港绿色和可持续金融大奖12月1日,香港品质保证局可持续金融及气候适应香港2022国际专题研讨会成功举办。在同期举行的香港绿色和可持续金融大奖2022颁奖典礼上,君乐宝乳业集团凭借在绿色和可持续发展领域的
香港海洋公园推圣诞主题活动真雪打造特色冬雪世界香港海洋公园使用真雪打造特色游乐设施。戴小橦摄中新网香港12月12日电(记者戴小橦)套上钉鞋套,步入冰雪天地,在漫天飘雪的森林中漫步打雪仗堆雪人香港海洋公园在12日举行的圣诞节传媒
路人街拍,天选好身材才能这样穿现在健身越来越成为不管是男生还是女生生活中都很重要的一种时尚生活方式,没有一张两张健身卡好像自己就不是一个合格的追的上潮流的年轻人一样,其实运动风越来越走进了我们的生活,在穿衣搭配
有一种大气叫周冬雨,穿深V长裙高级霸气,性感与身材无关头条创作挑战赛很多时候,我们为了凸显出优越的体型,会选择深V领口的服装。其实深V领不仅是性感的体现,更是一种自然的修饰。这种领口拉伸颈部线条,表现高级霸气美。即便是没有饱满体型的姑
国际锐评丨卡塔尔世界杯不欢迎西方人权卫士本周,卡塔尔世界杯将迎来万众瞩目的半决赛决赛,大力神杯花落谁家即将揭晓。有评论称,西方媒体终于可以关注比赛本身了。的确,半个多月来,一些西方媒体严重失焦美国有线电视新闻网华盛顿邮报
死过的他,戴着心脏起搏器满血回归世界杯2022年卡塔尔世界杯还在如火如荼地进行。虽然丹麦队在小组赛中不敌澳大利亚憾然离场,但球员克里斯蒂安埃里克森(ChristianEriksen)的表现至今仍令中六君记忆犹新佩戴着心