在Apache RocketMQ中,名称服务器用于协调分布式系统的每个组件,主要通过管理主题路由信息来实现协调。
管理由两部分组成:
- Brokers 定期更新保存在每个名称服务器中的元数据。
- 名称服务器是为客户端提供最新的路由信息服务的,包括生产者、消费者和命令行客户端。
因此,在启动 brokers 和 clients 之前,我们需要告诉他们如何通过给他们提供的一个名称服务器地址列表来访问名称服务器。在Apache RocketMQ中,可以用四种方式完成。
编程的方式
对于 brokers,我们可以在 broker 的配置文件中指定 namesrvAddr=name-server-ip1:port;name-server-ip2:port
对于生产者和消费者,我们可以给他们提供姓名服务器地址列表如下:
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
consumer.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");
如果您从shell中使用管理命令行,您也可以这样指定:
sh mqadmin command-name -n name-server-ip1:port;name-server-ip2:port -X OTHER-OPTION
一个简单的例子是 sh mqadmin -n localhost:9876 clusterList
指定在名称服务器节点上查询集群信息。
如果您将管理工具集成到您自己的仪表板中,您可以:
DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt("please_rename_unique_group_name");
defaultMQAdminExt.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");
Java 参数
还可以通过指定后续的java参数 rocketmq.namesrvv.addr
来对您的应用程序提供名称服务器地址列表。
环境变量
您可以设置NAMESRV_ADDR
环境变量。如果设置了,Broker和clients将检查并使用其值。
HTTP端点(HTTP Endpoint)
如果您没有使用前面提到的方法指定名称服务器地址列表,Apache RocketMQ将以每2分钟访问以下HTTP端点以获取和更新名称服务器地址列表,初始延迟10秒。
默认情况下,终点是:
http://jmenv.tbsite.net:8080/rocketmq/nsaddr
你可以使用这个Java选项:rocketmq.namesrv.domain
覆盖 jmenv.tbsite.net
,你也可以使用这个Java选项 rocketmq.namesrv.domain.subgroup
覆盖 nsaddr
部分
如果在生产环境中运行Apache RocketMQ,建议使用此方法,因为它提供了最大的灵活性——您可以动态地添加或删除名称服务器节点,而无需根据您的名称服务器的系统负载重新启动代理和客户端。
优先级
首先介绍的方法优先于后一种方法:
编程方式 > Java选项 > 环境变量 > HTTP端点