Centos单机部署RocketMQ,RocketMQ-MQTT以及管理界面
RocketMQ官网:https://rocketmq.apache.org/download
虚拟机环境
- Centos7.9
- jdk1.8
- 8h8g
下载rocketmq源码文件:https://rocketmq.apache.org/download
根据需要选择对应的版本,我这边版本是4.9.4
部署
将rocketmq-all-4.9.4-bin-release.zipp
上传到linux服务器上面/usr/local/
执行
# 解压
unzip rocketmq-all-4.9.4-bin-release.zip
# 安装到/usr/local/rocketmq
ln -s rocketmq-all-4.9.4-bin-release /usr/local/rocketmq
创建/etc/profile.d/rocketmq.sh
文件
vi /etc/profile.d/rocketmq.sh
# 加入内容
export rocketmq=/usr/local/rocketmq-4.9.4/
export PATH=$PATH:$rocketmq/bin
调低RocketMQ的JVM大小
RocketMQ的默认JVM太大,不适合在开发测试环境中使用,需要调低JVM大小。
在RocketMQ的安装目录(本例为/usr/local/rocketmq
),查找sh脚本中的JVM参数设置:find . -name '*.sh' | xargs egrep 'Xms'
需要修改以下sh脚本的JVM参数:
- bin/runserver.sh
- bin/runbroker.sh
- bin/tools.sh
修改前记得先备份相应脚本,具体JVM大小根据实际情况设定。
runserver.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
runbroker.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
tools.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m"
修改配置文件参数
修改conf/broker.conf
文件
最后追加
namesrvAddr=127.0.0.1:9876
brokerIP1=服务器IP
# Broker 对外服务的监听端口
listenPort=10911
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog 每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# 存储路径
# storePathRootDir=/data/rocketmq/store
# commitLog 存储路径
# storePathCommitLog=/data/rocketmq/store/commitlog
启动namesrv
启动命令
nohup sh bin/mqnamesrv >/dev/null 2>&1 &
Name Server的默认端口为
9876
,运行sh bin/mqnamesrv -p可查看Name Server的配置项,并可通过-c namesrv.conf方式指定配置文件启动:nohup sh bin/mqnamesrv -n 服务器内网ip:9876 &
查看日志
tail -f ~/logs/rocketmqlogs/namesrv.log
namesrv服务关闭命令
sh bin/mqshutdown namesrv
占用端口:9876
启动Broker
启动Broker时需要指定要连接的Name Server
启动命令
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf >/dev/null 2>&1 &
查看日志:
tail -f ~/logs/rocketmqlogs/broker.log
broker服务关闭命令:
sh bin/mqshutdown broker
占用端口:10909 10911 10912
测试生产者和消费者
export NAMESRV_ADDR=服务器内网IP:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
topic一些操作
查看所有topic
sh bin/mqadmin topicList -n localhost:9876
查看集群信息
sh bin/mqadmin clusterList -n 127.0.0.1:9876
查看Topic 列表信息
sh mqadmin topicRoute -n 127.0.0.1:9876 -t broker-a
查看Topic 统计信息
sh mqadmin topicStatus -n 127.0.0.1:9876 -t broker-a
部署 RocketMQ Dashboard
参考:https://rocketmq.apache.org/docs/%E9%83%A8%E7%BD%B2%E4%B8%8E%E8%BF%90%E7%BB%B4/17Dashboard
我这边是源码安装编译后上传服务器(可选docker部署),执行:java -jar rocketmq-dashboard-1.0.0.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876
--rocketmq.config.namesrvAddr
是指定namesrv服务地址占用端口:8080
部署 RocketMQ MQTT Server
参考:https://github.com/apache/rocketmq-mqtt
(网上资料很少很少)
修改broker.conf
新增如下信息
enableLmq = true
enableMultiDispatch = true
下载源码,编译源码
这边是通过IDEA编译的,代码克隆地址:https://github.com/apache/rocketmq-mqtt
下载后可编译:mvn -Prelease-all -DskipTests clean install -U
编译完成:
cd distribution/target/
cd conf
二选一上传到服务器,解压后~进入bin
目录执行:sed -i 's/\r$//' *.sh
(因为是windows编译shell会报换行的错)
修改配置文件
修改conf/service.conf配置文件
username=xinsec #用于身份验证
secretKey=xinsec #用于身份验证
NAMESRV_ADDR=10.80.210.206:9876 # 指定namesrv地址
eventNotifyRetryTopic=eventNotifyRetryTopic #通知事件重试topic
clientRetryTopic=clientRetryTopic #客户重试的topic
调低RocketMQ的JVM大小
RocketMQ的默认JVM太大,不适合在开发测试环境中使用,需要调低JVM大小。
bin/runserver.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
创建主题
sh mqadmin updatetopic -c DefaultCluster -t eventNotifyRetryTopic -n localhost:9876
sh mqadmin updatetopic -c DefaultCluster -t clientRetryTopic -n localhost:9876
初始化元
配置网关节点列表
sh mqadmin updateKvConfig -s LMQ -k LMQ_CONNECT_NODES -v 10.80.210.206 -n 10.80.210.206:9876
配置一级主题列表
sh mqadmin updateKvConfig -s LMQ -k ALL_FIRST_TOPICS -v eventNotifyRetryTopic,clientRetryTopic -n 10.80.210.206:9876
在每个第一级主题下配置通配符列表
sh mqadmin updateKvConfig -s LMQ -k eventNotifyRetryTopic -v eventNotifyRetryTopic/+ -n 10.80.210.206:9876
sh mqadmin updateKvConfig -s LMQ -k clientRetryTopic -v clientRetryTopic/+ -n 10.80.210.206:9876
启动mqtt
cd bin
sh mqtt.sh start
验证是否启动成功
端口
占用了:1883(mqtt协议) 7001(RPC协议) 8888(ws协议)
进程
ps -ef | grep mqtt
or ps -ef | gerp org.apache.rocketmq.mqtt.cs.starter.Startup
查看日志
tail -f ~/logs/mqtt.log
验证登录消费测试
使用的是官方mqtt-example模块
,网上资料很少很少(几乎为零),暂时还是存在启动成功,使用mqttx的工具死活认证失败(可能是加密方式不行),然后修改了官方的例子进行修改,完美连上。
设置开机自启
在/usr/local/bin/
创建start-rocketmq.sh
的shell脚本,内容如下:
#!/bin/bash
source /etc/profile.d/jdk.sh
cd /usr/local/rocketmq && nohup /bin/sh ./bin/mqnamesrv > /dev/null &
sleep 20
cd /usr/local/rocketmq && nohup /bin/sh ./bin/mqbroker -n localhost:9876 -c ./conf/broker.conf > /dev/null &
sleep 10
cd /usr/local/rocketmq && nohup java -jar rocketmq-dashboard-1.0.0.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876 > /dev/null &
sleep 10
cd /usr/local/rocketmq-mqtt && ./bin/mqtt.sh start
执行:echo "/bin/bash /usr/local/bin/start-rocketmq.sh" >> /etc/rc.d/rc.local
chmod +x /usr/local/bin/start-rocketmq.sh
chmod +x /etc/rc.d/rc.local