开发学院

您的位置:首页>教程>正文

教程正文

RocketMQ 订阅Name Server列表的四种方法

  在Apache RocketMQ中,NameServer旨在协调分布式系统的每个组件,并通过管理主题路由信息来履行大部分职责。

  大致来说,管理层由两部分组成:

  Broker定期更新元数据,包括他们拥有的topic,这些topic保存在每一个NameServer中。

  NameServer为客户端服务,包括producers, consumers和命令行客户端,提供最新的路由信息。

  因此,在启动Broker和客户端之前,我们需要告诉他们如何通过提供NameServer列表来访问NameServer。在Apache RocketMQ中,这可以通过四种方式完成。

编程方式

  对于broker,我们可以代理配置文件中指定namesrvAddr=name-server-ip1:port;name-server-ip2:port 。

  对于producer和consumer,我们可以将NameServer地址列表提供给他们,如下所示:

 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 查询名称服务器节点上的群集信息。

  如果将管理工具集成到您自己的仪表板中,您可以:

DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt("please_rename_unique_group_name"); 
defaultMQAdminExt.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");

Java选项

  NameServer列表也可以通过在启动之前指定java选项来提供给你的应用程序。

环境变量

您可以export NAMESRV_ADDR环境变量。Broker和客户将检查并使用其值(如果设置的话)。

HTTP端点

  如果您没有使用前面提到的方法指定NameServer列表,Apache RocketMQ将每两分钟访问以下HTTP地址来获取和更新NameServer列表,初始延迟为10秒。

  默认情况下,网址为:

http://jmenv.tbsite.net:8080/rocketmq/nsaddr

  你可以用这个java选项覆盖 jmenv.tbsite.net: rocketmq.namesrv.domain,你也可以用这个java选项覆盖nsaddr部分:  rocketmq.namesrv.domain.subgroup

  如果您正在生产环境中运行Apache RocketMQ,建议使用这种方法,因为它给了您最大的灵活性:您可以根据NameServer的系统负载动态添加或删除NameServer节点,而无需重新启动Broker和客户端。

优先级

  编程方式> Java选项 > 环境变量 > HTTP端点