RocketMQ(2) 部署与维护
条评论由于用到了事务消息功能,所以我使用的是3.1.4版本,这是一个非常老的版本,3.x最新稳定版本是3.5.8。
RocketMQ从4.0版本开始在Apache孵化,目前最新版本是4.2.0,不包含事务消息功能,预计4.3.0版本可能会增加事务消息功能。
RocketMQ官方版本V3.0.4~3.1.4基于文件系统实现了事务消息,已开源;V3.1.5~4.2.0基于数据库实现事务消息,未开源。
部署
如下图所示,RocketMQ由NameServer和BrokerServer组成,其中NameServer用做注册中心,Broker启动后注册到NameServer,Producer和Consumer与NameServer通信,获取Broker的地址;Producer发送消息给Broker,Broker完成消息存储,并负责将消息投递给Consumer。

RocketMQ 3.1.4
这里 有V3.1.4版本的源码,是作为V3.1.9版本的一个分支存在的。
打包
环境准备:安装rocketmq前需要先安装jdk,git和maven
编译打包
cd rocketmq-3.1.4 |
启动
由于默认启动参数配置的内存比较大,所以开发环境我们一般会先调整一下内存参数,具体为修改apache-rocketmq/bin目录下的runserver.sh和runbroker.sh脚本,修改其中的JAVA_OPT,将Xms/Xmx/Xmn等内存参数调整到合适大小
首先,启动NameServer,NameServer默认服务端口为9876
cd target/alibaba-rocketmq-3.1.4/alibaba-rocketmq |
然后,启动BrokerServer,其中-n参数为NameServer的地址和端口,Broker的服务端口为10911和10912,10911供Producer和Consumer通信使用,10912供Broker集群通信使用
cd target/alibaba-rocketmq-3.1.4/alibaba-rocketmq |
Broker启动时将自己的地址和端口注册到NameServer上,但存在多网卡时,Broker有可能获取不到正确的IP地址,最后导致Producer和Consumer连接不到Broker上,出现类似下面这样的错误。
connect to <172.17.0.1:10911> failed |
这种情况下,我们需要在Broker启动时指定IP地址,具体方法为配置一个启动参数文件broker.properties,内容如下(可以从conf/2m-noslave/broker-a.properties复制并修改):
brokerClusterName=DefaultCluster |
启动脚本如下,重点在于-c参数指定了配置文件,如果需要我们可以在broker.properties中做更多个性化配置
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.properties > /dev/null 2>&1 & |
关闭
关闭Broker服务
sh bin/mqshutdown broker |
关闭NameServer服务
sh bin/mqshutdown namesrv |
正常先关闭broker,再关闭namesrv
RocketMQ 4.2.0
这里 有详细指南,按照文档一步一步操作即可,和3.1.4版本区别不大。
首先,下载源代码 rocketmq-all-4.2.0-source-release.zip ,解压并编译打包
mvn -Prelease-all -DskipTests clean install -U |
注意:下面启动使用/distribution/target/apache-rocketmq/bin,而不是/distribution/bin
3.1.4版本叫alibaba-rocketmq,4.2.0版本叫apache-rocketmq
启动和关闭方法与3.1.4一样:
修改runserver.sh和runbroker.sh调整内存大小,修改/conf/broker.conf增加IP地址。
cd rocketmq-all-4.2.0/distribution/target/apache-rocketmq |
查看端口,如果9876/10909/10911/10912端口都已启动监听,说明启动成功。
netstat -tnpl |
- 10909:VIP端口
- 10911:Broker主要端口,发送和拉取消息都使用它
- 10912:集群通信端口
命令管理
RocketMQ提供了bin/mqadmin命令行对消息队列进行管理,以下4.2.0版本为例,3.1.4版本基本一样。
-n设置NameServer地址和端口(从NameServer上获取Broker地址和端口)
查看主题列表,RocketMQ安装完成后自带了如下主题
bin/mqadmin topicList -n localhost:9876
BenchmarkTest
OFFSET_MOVED_EVENT
broker-a
TBW102
SELF_TEST_TOPIC
DefaultCluster创建主题
| 参数 | 说明 |
|---|---|
| -n | NameServer地址和端口 |
| -b | Broker地址和端口(Topic创建在这个Broker上面) |
| -c | Cluster名称(Broker和Cluster二选一) |
| -t | Topic主题名称 |
| -r | 读队列数(默认8个) |
| -w | 写队列数(默认8个) |
创建主题test
bin/mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t test -r 4 -w 4 |
- 查看Topic信息
bin/mqadmin topicStatus -n localhost:9876 -t test |
- 查看集群信息
bin/mqadmin clusterList -n localhost:9876 |
- 根据MessageID查询消息
bin/mqadmin queryMsgById -n localhost:9876 -i |
- 根据消息Key查询消息
bin/mqadmin queryMsgByKey -n localhost:9876 -t test -k |
控制台
虽然通过命令行可以查看RocketMQ状态,但是使用起来很不方便。幸运的是RocketMQ提供了页面控制台,我们可以通过UI来操作,方便多了。
rocketmq-console项目封装了mqadmin指令,提供了web页面来展示rocketmq信息,所以通常我们都使用rocketmq-console来查看RocketMQ状态。
rocketmq-console属于rocketmq-externals 项目的一部分。
- 首先,获取源码
git clone https://github.com/apache/rocketmq-externals |
- 然后,打包部署(rocketmq-console是spring boot项目)
cd rocketmq-externals/rocketmq-console |
修改配置文件 rocketmq-console/src/main/resources/application.properties
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876 |
最后启动
nohup java -jar target/rocketmq-console-ng-1.0.0.jar > /dev/null 2>&1 & |
v3.1.4版本是没有提供控制台工具的,rocketmq-externals(包括rocketmq-console)是为rocketmq v4.0.0以上版本服务的。所以,理论上rocketmq-console和v3.1.4是不兼容的。不过,mqadmin的指令协议没有变化,所以基本使用是可以的。当然,升级到4.0.0以上版本就更没有问题了。
集群
https://blog.csdn.net/xiaojie19871116/article/details/46982907