天天看點

45. 源代碼閱讀-RocketMQ-tools

RocketMQ-tools分為3部分

admin

command

monitor

下面一一介紹

提供了管理操作接口

command提供了指令行控制MQ的一些方法。

進入RocketMQ安裝目錄,執行sh bin/mqadmin

有幾個參數的執行方法

列印指令提示,如下:

列印某個指令的提示參數,比如sh bin/mqadmin helop updatetopic(不需要區分大小寫)

比如 sh bin/mqadmin updatetopic -x xxx

首先來看bin/mqadmin這個啟動腳本

前面在設定ROCKETMQ_HOME環境變量,然後啟動MQAdminStartup這個類。

邏輯很簡單,

首先初始化可以支援的Command - initCommand

initLogback根據logback_tools.xml初始化,主要是日志系統。

然後根據傳入過來的參數,選擇不同的執行分支,也就是上面舉例的參數。

以updatetopic為例

進入UpdateTopicSubCommand.execute(xx)方法

execute的邏輯就是擷取傳入的參數,-t是必須的,然後還必須帶上-b或者-c才會執行。

如果沒有執行,那麼會列印updatetopic的參數清單。

-b代表某個broker, -c代表叢集

是以大概格式是: sh ./bin/mqadmin updatetopic -t topictest -b xxx

其他參數是可選的。

如果确定要更新topic,那麼就會調用RocketMQ-cli裡面的接口進行更新。

更新成功會列印更新成功輸出,否則會報異常。

附上所有指令的操作參數

<a href="https://www.cnblogs.com/zyguo/p/4962425.html">https://www.cnblogs.com/zyguo/p/4962425.html</a>

監控相關

啟動類是參數是startMonitoring

sh bin/mqadmin startMonitoring

代碼如下:

-n表示要顯示連接配接到的namesrv

-c

如果commandLine包含n參數,也就是如果輸入指令有帶-n的參數,比如sh bin/mqadmin topiclist -n localhost:9876。那麼把它帶的參數值拿出來,然後設定到SystemProperty裡面。

這樣做是為了其他地方可以拿這個參數,也就是RocketMQ傳遞namesrv address的時候,不是用普通的參數傳遞,而是用系統屬性。

這樣做有好處也有不好的地方吧,好處就是省心,一個位址設定了,很多地方都有可以得到這個值。不需要每個參數傳來傳去。不好的地方就是如果設定的地方多了,就容易混淆,互相影響。

然後執行command的execute方法, 也就是TopicListSubCommand.execute方法。

所有的command都實作了SubCommand接口。

SubCommand提供了幾個接口方法

這個類主要就是根據傳入的參數是否有-c 或者-n 擷取相應的topic,然後列印出來。

以-n為例,它的邏輯就是去namesrv擷取所有的topic,然後列印出來。

     本文轉自rongwei84n 51CTO部落格,原文連結:http://blog.51cto.com/483181/2043859,如需轉載請自行聯系原作者