RocketMQ动态增加NameServer

前言

通过HTTP服务来设置NameServer地址,是唯一支持动态增加NameServer的方式,无需重启其它组件
[以上是书本原话],实际项目中,比如我们这里是将NameServer配置为域名,通过nginx reload 来实现的
网上搜了下没看到有兄弟们演示这块,所以刚才自己试了试,做个笔记
本文有详细的演示过程

都知道NameServer有4种配置方式,这里就不做赘述了

正文

  1. 看源码 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;
    }
  1. 给producer和consumer添加配置
-Drocketmq.namesrv.domain=127.0.0.1:18888 -Drocketmq.namesrv.domain.subgroup=dynamicNameServerAddress

在这里插入图片描述
3. 添加一个用于返回NameServer地址的HTTP接口
在这里插入图片描述

  1. 先看看启动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
正常消费完成
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值