在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端點