在Apache RocketMQ中,名稱(chēng)服務(wù)器用于協(xié)調(diào)分布式系統(tǒng)的每個(gè)組件,主要通過(guò)管理主題路由信息來(lái)實(shí)現(xiàn)協(xié)調(diào)。
管理由兩部分組成:
- Brokers 定期更新保存在每個(gè)名稱(chēng)服務(wù)器中的元數(shù)據(jù)。
- 名稱(chēng)服務(wù)器是為客戶端提供最新的路由信息服務(wù)的,包括生產(chǎn)者、消費(fèi)者和命令行客戶端。
因此,在啟動(dòng) brokers 和 clients 之前,我們需要告訴他們?nèi)绾瓮ㄟ^(guò)給他們提供的一個(gè)名稱(chēng)服務(wù)器地址列表來(lái)訪問(wèn)名稱(chēng)服務(wù)器。在Apache RocketMQ中,可以用四種方式完成。
編程的方式
對(duì)于 brokers,我們可以在 broker 的配置文件中指定 namesrvAddr=name-server-ip1:port;name-server-ip2:port
對(duì)于生產(chǎn)者和消費(fèi)者,我們可以給他們提供姓名服務(wù)器地址列表如下:
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
一個(gè)簡(jiǎn)單的例子是 sh mqadmin -n localhost:9876 clusterList 指定在名稱(chēng)服務(wù)器節(jié)點(diǎn)上查詢集群信息。
如果您將管理工具集成到您自己的儀表板中,您可以:
DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt("please_rename_unique_group_name");
defaultMQAdminExt.setNamesrvAddr("name-server1-ip:port;name-server2-ip:port");
Java 參數(shù)
還可以通過(guò)指定后續(xù)的java參數(shù) rocketmq.namesrvv.addr 來(lái)對(duì)您的應(yīng)用程序提供名稱(chēng)服務(wù)器地址列表。
環(huán)境變量
您可以設(shè)置NAMESRV_ADDR環(huán)境變量。如果設(shè)置了,Broker和clients將檢查并使用其值。
HTTP端點(diǎn)(HTTP Endpoint)
如果您沒(méi)有使用前面提到的方法指定名稱(chēng)服務(wù)器地址列表,Apache RocketMQ將以每2分鐘訪問(wèn)以下HTTP端點(diǎn)以獲取和更新名稱(chēng)服務(wù)器地址列表,初始延遲10秒。
默認(rèn)情況下,終點(diǎn)是:
http://jmenv.tbsite.net:8080/rocketmq/nsaddr
你可以使用這個(gè)Java選項(xiàng):rocketmq.namesrv.domain 覆蓋 jmenv.tbsite.net ,你也可以使用這個(gè)Java選項(xiàng) rocketmq.namesrv.domain.subgroup 覆蓋 nsaddr 部分
如果在生產(chǎn)環(huán)境中運(yùn)行Apache RocketMQ,建議使用此方法,因?yàn)樗峁┝俗畲蟮撵`活性——您可以動(dòng)態(tài)地添加或刪除名稱(chēng)服務(wù)器節(jié)點(diǎn),而無(wú)需根據(jù)您的名稱(chēng)服務(wù)器的系統(tǒng)負(fù)載重新啟動(dòng)代理和客戶端。
優(yōu)先級(jí)
首先介紹的方法優(yōu)先于后一種方法:
編程方式 > Java選項(xiàng) > 環(huán)境變量 > HTTP端點(diǎn)