前言
通过HTTP服务来设置NameServer地址,是唯一支持动态增加NameServer的方式,无需重启其它组件
网上搜了下没看到有兄弟们演示这块,所以刚才自己试了试,做个笔记
本文有详细的演示过程
都知道NameServer有4种配置方式,这里就不做赘述了
正文
- 看源码 MixAll 类
确实是通过 rocketmq.namesrv.domain 和 rocketmq.namesrv.domain.subgroup 来完成的HTTP服务接口的配置的(将变量设置到 VM OPTION 里就可以了),并且支持自定义端口
public static String getWSAddr() {String wsDomainName = System.getProperty("rocketmq.namesrv.domain", DEFAULT_NAMESRV_ADDR_LOOKUP);String wsDomainSubgroup = System.getProperty("rocketmq.namesrv.domain.subgroup", "nsaddr");String wsAddr = "http://" + wsDomainName + ":8080/rocketmq/" + wsDomainSubgroup;if (wsDomainName.indexOf(":") > 0) {wsAddr = "http://" + wsDomainName + "/rocketmq/" + wsDomainSubgroup;}return wsAddr;}
- 给producer和consumer添加配置
-Drocketmq.namesrv.domain=127.0.0.1:18888 -Drocketmq.namesrv.domain.subgroup=dynamicNameServerAddress
3. 添加一个用于返回NameServer地址的HTTP接口
- 先看看启动producer的效果
4.1 先启动一个 NameServer
看到下面这句(The Name Server boot success. serializeType=JSON),就是启动成功了。
我这里只是下载了github最新的rocketmq源码进行启动而已,不要在意这些细节,本地已有服务的,可以直接用。(不用本地启动NameServer和Broker)
4.2 启动 Broker
没报错就是OK
4.3 启动 Produber
我这里直接用的源码中的example
直接使用 org.apache.rocketmq.example.quickstart.Producer 启动就好了
因为NameServer是HTTP服务动态返回的(每2分钟刷新一次),所以需要屏蔽掉代码 producer.setNamesrvAddr
这里加了个断点,可以看看效果
消息生产结束
4.4 启动 Consumer
正常消费完成
感觉自己还是演示得很到位了,觉得有帮助的同学点个赞吧,(。-ω-)zzz