检查环境
RocketMQ是java开发的,所以依赖 JDK 环境,先检查Java环境
java -version
下载安装包
安装包可以直接去 RocketMQ官网 下载
wget https://dist.apache.org/repos/dist/release/rocketmq/5.3.1/rocketmq-all-5.3.1-source-release.zip
解压安装包
unzip rocketmq-all-5.3.1-bin-release.zip
mv rocketmq-5.3.1 rocketmq
cd rocketmq-5.3.1/
解压后我们可以看到RocketMQ 的目录结构如下:
bin/
:启动脚本和管理工具conf/
:配置文件lib/
:运行时依赖的库文件logs/
:RocketMQ 的日志文件
配置并启动MQ
RocketMQ 的配置分为两个部分:NameServer 和 Broker。
调整 JVM 内存参数
由于 RocketMQ 是一个高性能的消息中间件,合理的 JVM 内存配置至关重要。默认情况下,RocketMQ 的 NameServer 和 Broker 使用的 JVM 参数在启动脚本 bin/runserver.sh 和 bin/runbroker.sh 中设置。
因为我这里是生产环境服务器内存够,所以我不做调整,如果你的服务器内存有限,建议调整这些参数,以 Broker 为例:
vi /usr/local/rocketmq/bin/runserver.sh
vi /usr/local/rocketmq/bin/runbroker.sh
# 如果你的机器内存小可以将默认的 JVM 配置修改为适合当前机器环境的配置,比如
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
配置broker配置文件,位置:conf/broker.conf
增加以下配置:
namesrvAddr = localhost:9876
autoCreateTopicEnable=true
运行 NameServer
nohup sh bin/mqnamesrv &
# 查看日志
tail -f ~/logs/rocketmqlogs/namesrv.log
日志中出现 The Name Server boot success...
即表示 NameServer 启动成功。
也可以使用jps查看java进程
启动 Broker
nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true &
# 查看日志
tail -f ~/logs/rocketmqlogs/broker.log
2024-12-12 16:51:56 INFO main - The broker[compute1, 10.0.21.52:10911] boot success. serializeType=JSON and name server is localhost:9876
2024-12-12 16:52:05 INFO BrokerControllerScheduledThread1 - Dispatch task fall behind commit log 0bytes
2024-12-12 16:52:06 INFO brokerOutApi_thread_2 - Registering current broker to name server completed. TargetHost=localhost:9876
日志中出现 The broker[broker-a, 10.0.21.52:10911] boot success...
时,说明 Broker 启动成功
去掉 nohup
直接运行,观察实时输出,启动失败时可以方便排查
测试消息
Producer 发送消息
设置 NAMESRV_ADDR 环境变量
export NAMESRV_ADDR=localhost:9876
发送消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
终端出现类似以下打印输出,表示发送成功
SendResult [sendStatus=SEND_OK, msgId=0A001534A03A277050DC913FE2BA03E0, offsetMsgId=0A00153400002A9F000000000003A952, messageQueue=MessageQueue [topic=TopicTest, brokerName=compute1, queueId=1], queueOffset=248]
SendResult [sendStatus=SEND_OK, msgId=0A001534A03A277050DC913FE2BB03E1, offsetMsgId=0A00153400002A9F000000000003AA44, messageQueue=MessageQueue [topic=TopicTest, brokerName=compute1, queueId=2], queueOffset=248]
SendResult [sendStatus=SEND_OK, msgId=0A001534A03A277050DC913FE2BD03E2, offsetMsgId=0A00153400002A9F000000000003AB36, messageQueue=MessageQueue [topic=TopicTest, brokerName=compute1, queueId=3], queueOffset=248]
Consumer 消费消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
终端出现类似以下打印输出,表示消息消费成功
ConsumeMessageThread_please_rename_unique_group_name_4_13 Receive New Messages: [MessageExt [brokerName=compute1, queueId=0, storeSize=242, queueOffset=219, sysFlag=0, bornTimestamp=1732870482854, bornHost=/10.0.21.52:38214, storeTimestamp=1732870482855, storeHost=/10.0.21.52:10911, msgId=0A00153400002A9F0000000000033E80, commitLogOffset=212608, bodyCRC=961083554, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={CONSUME_START_TIME=1732870532089, MSG_REGION=DefaultRegion, UNIQ_KEY=0A001534A03A277050DC913FE1A6036F, CLUSTER=DefaultCluster, MIN_OFFSET=0, TAGS=TagA, WAIT=true, TRACE_ON=true, MAX_OFFSET=250}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 56, 55, 57], transactionId='null'}]]
ConsumeMessageThread_please_rename_unique_group_name_4_1 Receive New Messages: [MessageExt [brokerName=compute1, queueId=0, storeSize=242, queueOffset=215, sysFlag=0, bornTimestamp=1732870482825, bornHost=/10.0.21.52:38214, storeTimestamp=1732870482826, storeHost=/10.0.21.52:10911, msgId=0A00153400002A9F0000000000032F60, commitLogOffset=208736, bodyCRC=1082532093, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={CONSUME_START_TIME=1732870532089, MSG_REGION=DefaultRegion, UNIQ_KEY=0A001534A03A277050DC913FE189035F, CLUSTER=DefaultCluster, MIN_OFFSET=0, TAGS=TagA, WAIT=true, TRACE_ON=true, MAX_OFFSET=250}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 56, 54, 51], transactionId='null'}]]
如何关闭 Broker 与 NameServer
关闭 Broker
sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
关闭 NameServer
sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
设置开机自启
创建NameServer的服务
创建并编辑 /etc/systemd/system/rocketmq-nameserver.service
[Unit]
Description=RocketMQ NameServer Service
After=network.target
[Service]
Type=forking
ExecStart=/opt/rocketmq/bin/mqnamesrv
ExecStop=/opt/rocketmq/bin/mqshutdown namesrv
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
创建Broker的服务
创建并编辑 /etc/systemd/system/rocketmq-broker.service
[Unit]
Description=RocketMQ Broker Service
After=network.target rocketmq-nameserver.service
[Service]
Type=forking
ExecStart=/opt/rocketmq/bin/mqbroker -n localhost:9876
ExecStop=/opt/rocketmq/bin/mqshutdown broker
User=root
Restart=on-failure
[Install]
WantedBy=multi-user.target
设置开机自启
# 刚编辑了服务要重载
systemctl daemon-reload
# 设置重启
systemctl enable rocketmq-nameserver
systemctl enable rocketmq-broker
配置可视化控制台
原有的rocketmq-console已被rocketmq-externals单独列为一个项目,现在取名:rocketmq-dashboard
下载或者克隆项目后用mvn进行编译
# Git克隆
https://github.com/apache/rocketmq-dashboard.git
# 最新版包下载
https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-2.0.0.tar.gz
# 进入项目或者解压后进入项目 编译
mvn clean package -Dmaven.test.skip=true
# 启动
java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar