天天看點

RocketMQ概念詳細之NameServer

在Apache RocketMQ,域名伺服器 被設計為協調分布式系統的每個元件,協調主要通過管理主題路由資訊來實作。

管理由兩部分組成:

  • Broker定期更新儲存在每一個NameServer中的中繼資料
  • NameServer為用戶端提供服務,包括生産者,消費者和帶有最新路由資訊的指令行用戶端。

是以,在啟動broker和用戶端之前,我們需要告訴它們如何通過向NameServer提供域名服務位址清單通路name servers。

在Apache RocketMQ,可以通過四種方式完成。

程式設計方式

對于Broker,你可以在broker配置檔案中指定namesrvAddr=name-server-ip1:port;name-server-ip2:port。

對于生産者和消費者,我們可以像下面提供 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 admin指令行,你可以像這樣指定:

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

簡單例子:sh mqadmin -n localhost:9876 clusterList 假設在NameServer節點查詢叢集資訊。

如果你已經将admin tool整合在你自己的儀表盤,你可以:

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

java選項

NameServer位址清單可以在啟動前通過指定java選項 rocketmq.namesrv.addr 提供給你的應用。

環境變量

你可以export NAMESRV_ADDR 環境變量。如果設定,Brokers和clients将會檢查和使用它。

HTTP Endpoint

如果你沒有使用上面提到的方法指定NameServer位址清單,RocketMQ将通路以下http端點,每兩分鐘擷取和更新NameServer位址清單,初始延遲10秒。

預設,端點:

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

你可以覆寫jmenv.tbsite.net使用java選項:rocketmq.namesrv.domain,你也可以覆寫nsaddr 部分使用java選項:rocketmq.namesrv.domain.subgroup。

如果你在生産中已經運作RocketMQ,推薦使用這種方法,因為它提供了最大的靈活性。你可以根據NameServer系統的負載動态增加或移除NameServer節點,而無需重新啟動brokers 和clients。

優先級

Programmatic Way > Java Options > Environment Variable > HTTP Endpoint