RocketMq namesvr 最佳实践

RocketMq namesvr 最佳实践

翻译自RocketMQ官方文档

Apache RocketMQ中,name servers被设计用来协调分布式系统的每个部分,协调主要是完成topic路由信息管理。

管理包含两部分

  • Brokers 定期更新在name server中的 meta data 。
  • Name servers 是提供服务的客户端,包括producer,consumer和包含最新路由信息的命令行客户端。
    因此, 运行brokers和clients之前,需要通过一个nsv地址告诉它们如何去访问nsv,有四个方法:

程序方式

在Broker里,我们可以在配置文件指定:namesrvAddr=name-server-ip1:port;name-server-ip2:port。

在 producers 和 consumers, 我们可以按照下面的方法指定:

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");

如果用命令行,可以这样:

sh mqadmin command-name -n name-server-ip1:port;name-server-ip2:port -X OTHER-OPTION

A simple example is: sh mqadmin -n localhost:9876 clusterList assuming to query cluster info on the name server node.

如果你集成了admin工具在你的dashboard,你可以这样:

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

Java 参数

还可以在启动前通过指定java 参数rocketmq.namesrv.addr

环境参数

设置NAMESRV_ADDR环境参数

HTTP Endpoint

如果你没有按照之前上面的几种方式来设置, Apache RocketMQ还可以访问下面的HTTP 端点来获取更新nsv(每两分钟,最初延迟十秒)。

通常,接口是:

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

你可以重写在java参数中 jmenv.tbsite.net: rocketmq.namesrv.domain, 还可以通过这个重写: rocketmq.namesrv.domain.subgroup

如果在生产环境运行,这种方式比较推荐。因为它给你很大的方便,可以动态增加去除nsv节点而不需要重启broker和客户端。

优先级

Programmatic Way > Java Options > Environment Variable > HTTP Endpoint

你可能感兴趣的:(java基础知识,Mq)