24.RocketMQ之动态增减NameServer

这篇具有很好参考价值的文章主要介绍了24.RocketMQ之动态增减NameServer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


highlight: arduino-light

动态增减NameServer

一个消息队列集群由多台机器组成,持续稳定地提供服务,因为业务需求或硬件故障,经常需要增加或减少各个角色的机器,本节介绍如何在不影响服务稳定性的情况下动态地增减机器。

NameServer是RocketMQ集群的协调者,集群的各个组件是通过NameServer获取各种属性和地址信息的。

主要功能包括两部分:

1.各个Broker定期上报自己的状态信息到NameServer;

2.是各个客户端,包括Producer、Consumer,以及命令行工具,通过NameServer获取最新的状态信息。

所以,在启动Broker、生产者和消费者之前,必须告诉它们NameServer的地址,为了提高可靠性,建议启动多个NameServer。

NameServer占用资源不多,可以和Broker部署在同一台机器。有多个NameServer后,减少某个NameServer不会对其他组件产生影响。

有四种方式可设置NameServer的地址,下面按优先级由高到低依次介绍:

通过代码设置

比如在Producer中,通过

Producer.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port")

来设置。

在mqadmin命令行工具中,是通过-n name-server-ip1:port;name-server-ip2:port参数来设置。

如果自定义了命令行工具,也可以通过defaultMQAdminExt.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port")来设置。

使用Java启动参数设置

对应的option是rocketmq.namesrv.addr。

通过Linux环境变量设置

在启动前设置变量:NAMESRV_ADDR。

通过HTTP服务来设置

当上述方法都没有使用,程序会向一个HTTP地址发送请求来获取NameServer地址。

 public static String getWSAddr() {     //jmenv.tbsite.net        String wsDomainName =           System.getProperty("rocketmq.namesrv.domain",                                                 DEFAULT_NAMESRV_ADDR_LOOKUP);        //已硬编码为:nsaddr        String wsDomainSubgroup =           System.getProperty("rocketmq.namesrv.domain.subgroup", "nsaddr");             //http://jmenv.tbsite.net:8080/rocketmq/nsaddr        String wsAddr =           "http://" + wsDomainName + ":8080/rocketmq/" + wsDomainSubgroup;            if (wsDomainName.indexOf(":") > 0) {            wsAddr = "http://" + wsDomainName + "/rocketmq/" + wsDomainSubgroup;       }              return wsAddr;   }

默认的URL是http://jmenv.tbsite.net:8080/rocketmq/nsaddr

通过rocketmq.namesrv.domain参数来覆盖jmenv.tbsite.net;

通过rocketmq.namesrv.domain.subgroup参数来覆盖nsaddr。

第4种方式看似繁琐,但它是唯一支持动态增加NameServer,无须重启其他组件的方式。

定时任务:MQClientInstance#startScheduledTask

使用这种方式后其他组件会每隔2分钟请求一次该URL,获取最新的NameServer地址。

推荐使用HTTP静态服务器寻址方式,好处是客户端部署简单,且Name Server集群可以热升级。

java private void startScheduledTask() {     // http://jmenv.tbsite.net:8080/rocketmq/nsaddr     // producer在初始化时通过向固定地址发送 httpGet请求,从而获得name server地址     // 一般都是提前配置好 不存在动态增减的情况.     // 因为是有个判断null == this.clientConfig.getNamesrvAddr() 才会启动这个定时任务     // 2分钟更新一次nameServer的地址,该地址要求返回结果为一个ip列表,以;隔开        // 如果获取回来的地址跟现有的地址不一致则会更新缓存的NameServer地址列表。              if (null == this.clientConfig.getNamesrvAddr()) {            this.scheduledExecutorService.scheduleAtFixedRate(new Runnable() {                @Override                public void run() {                    try {                        MQClientInstance.this.mQClientAPIImpl.fetchNameServerAddr();                   } catch (Exception e) {                        log.error("ScheduledTask fetchNameServerAddr exception", e);                   }               }           }, 1000 * 10, 1000 * 60 * 2, TimeUnit.MILLISECONDS);       } } 文章来源地址https://www.toymoban.com/news/detail-518163.html

到了这里,关于24.RocketMQ之动态增减NameServer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python rocketmq生产者消费者

    安装依赖包 生产者 需要注意的是假如你用的java SDK 需要只是UNinname 我们可以看到下列代码设置了tag以及key,在页面可以根据key查找消息 消费方式PullConsumer(全部消费)(可重复消费) 消费方式PushConsumer(即时消费)(不可重复消费) 生产者发送消息选择队列,以及设置顺

    2024年02月14日
    浏览(39)
  • RocketMQ:一个纯java的开源消息中间件--开发测试环境搭建

    一、简介     RocketMQ的前身是Metaq,当 Metaq 3.0发布时,产品名称改为  RocketMQ     MetaQ2.x版本由于依赖了alibaba公司内部其他系统,对于公司外部用户使用不够友好,推荐使用3.0版本。      项目地址:  https://github.com/alibaba/RocketMQ

    2024年02月11日
    浏览(50)
  • RocketMQ mqadmin java springboot python 调用笔记

    mqadmin命令列表 Python 生产者:producer.py 运行 mqadmin查询topic状态 https://github.com/apache/rocketmq-dashboard 自行编译 启动        consoumer.py 启动python消费者 可以看到my-group1已被消费  再启动一个consumer.py,产生一次消息 可以看到,只有一个consumer消费到了消息,说明默认情况下,消息

    2024年02月11日
    浏览(32)
  • [前车之鉴] SpringBoot原生使用Hikari数据连接池升级到动态多数据源的深坑解决方案 & RocketMQ吞掉异常问题排查

    当前业务场景我们使用原生SpringBoot整合Hikari数据源连接池提供服务,但是近期业务迭代需要使用动态多数据源,很自然想到dynamic-source,结果一系列惨案离奇发生。。。 原生SpringBoot整合HikariCp数据源连接池配置【这个是没问题的配置】 而升级后的动态多数据源配置如下:【

    2024年02月01日
    浏览(51)
  • vue+element UI动态增减表单

        写在前面: 因为最近有个需求,需要新增联系人,而联系人数量并不确定,需要根据需要添加表单,一个联系人对应一个表单。    效果是这样的:     思路: ①写个div,把表单放在里面,旁边放2个按钮,添加和删除,且只有1个元素的时候不能显示删除按钮        

    2024年02月11日
    浏览(42)
  • Python脚本,用于查询RocketMQ的JMX接口以获取生产者和消费者的连接数

    以下是一个简单的Python脚本,用于查询RocketMQ的JMX接口以获取生产者和消费者的连接数。这个脚本依赖于 requests 库来发送HTTP请求。 首先,你需要在Broker的配置文件中开启JMX: 然后,你可以使用以下脚本来获取连接数: 然后,你可以在Zabbix中创建一个新的监控项,用于执行这

    2024年02月12日
    浏览(52)
  • 【RocketMQ】SpringBoot集成RocketMQ

    SpringBoot集成RocketMQ 首先依旧是引入依赖 然后就可以编写发送不同类型消息的代码了

    2024年02月12日
    浏览(35)
  • 【RocketMQ】005-Docker 部署 RocketMQ

    MQ 镜像 可视化平台镜像 创建 nameserver 挂载目录 创建 broker 目录 创建 broker 配置文件目录 目录:/home/zibo/docker/rocketmq/data/conf vim broker.conf 启动 nameserver docker run : 这是Docker命令,用于创建和管理Docker容器。 -d : 这是一个选项,指示Docker在后台运行容器。 --restart=always : 这是一个

    2024年02月16日
    浏览(39)
  • el-form 动态表单增减项 (vue+element ui)

    1、点击”+“,弹出弹窗,新增一项,点击”-“,删除当前项 代码展示: html代码: 注意: el-form-item(表单项)循环,绑定的数组写在form当中 表单: 新增参数弹框: data: methods: 1、点击新增,弹出新增弹窗,添加表单项 2、点击”-“,删除当前表单项

    2024年02月02日
    浏览(47)
  • 【RocketMQ】CentOS8安装RocketMQ

    检查jdk环境 RocketMQ是基于java开发的,安装之前请先查看是否有jdk环境 如果没有请去官网(https://www.oracle.com/java/technologies/downloads/#java8)下载 下载RocketMQ安装包 前往官网(https://rocketmq.apache.org/download)下载,选择二进制文件 在Linux环境中安装 把下载好的文件传入Linux系统中,

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包