Centos单机部署RocketMQ,RocketMQ-MQTT以及管理界面
本文最后更新于 889 天前,其中的信息可能已经有所发展或是发生改变。

Centos单机部署RocketMQ,RocketMQ-MQTT以及管理界面

RocketMQ官网:https://rocketmq.apache.org/download

虚拟机环境

  1. Centos7.9
  2. jdk1.8
  3. 8h8g

下载rocketmq源码文件:https://rocketmq.apache.org/download 根据需要选择对应的版本,我这边版本是4.9.4

image-20220906230621677

部署

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参数:

  1. bin/runserver.sh
  2. bin/runbroker.sh
  3. 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

image-20220907140459096

二选一上传到服务器,解压后~进入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 mqttor ps -ef | gerp org.apache.rocketmq.mqtt.cs.starter.Startup

查看日志

tail -f ~/logs/mqtt.log

验证登录消费测试

使用的是官方mqtt-example模块,网上资料很少很少(几乎为零),暂时还是存在启动成功,使用mqttx的工具死活认证失败(可能是加密方式不行),然后修改了官方的例子进行修改,完美连上。

image-20220907140111870

image-20220907140126424

设置开机自启

/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

评论

  1. qfl
    Windows Chrome 110.0.0.0
    2 年前
    2023-2-14 21:20:31

    你好,请问启动MQTT服务后,网页端可以连接8888端口,但是不能发送消息,也收不到订阅topic的消息,这是什么原因

  2. qfl
    Windows Chrome 110.0.0.0
    2 年前
    2023-2-14 21:21:45

    而且,自带的MQTTConsumer也收不到 MQTTProducer发布的消息

    • 博主
      qfl
      Windows Edge 110.0.1587.41
      2 年前
      2023-2-16 9:39:03

      这个具体需要去看github上的步骤了,因为当时mqtt也是刚出来,我们公司也只是验证阶段,后续研发也没具体反馈~

      • qfl
        郭良俊只狗
        Windows Chrome 110.0.0.0
        2 年前
        2023-2-21 16:27:04

        嗯,感谢回复,找到原因了,在cosole上配置的mqtt不能直接用

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇