天天看点

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,如需转载请自行联系原作者