基于 systemd 管理的 RocketMQ5.3 单机版部署

news/2025/11/3 14:37:24/文章来源:https://www.cnblogs.com/hovin/p/19187074

​ Apache RocketMQ 5.0 版本完成基本消息收发,包括 NameServer、Broker、Proxy 组件。

  • NameServer:作为名称服务器,负责管理消息队列和消费者组信息,提供服务注册与发现功能。Broker启动时会向 NameServer 注册自身信息(IP、端口、Topic路由配置等),并周期性发送心跳包维持存活状态。NameServer维护Broker的实时状态表,供客户端拉取路由信息;
  • Broker:作为消息代理服务器,承担消息的接收、处理和存储任务。单个Broker支持多Topic消息的收发,支持负载均衡和容错机制;
  • Proxy:负责扩展Broker的性能和容量,支持将消息路由到多个Broker实现负载均衡。同时提供队列管理、消费者管理、配置管理等接口供客户端使用。

​ 在 5.0 版本中 Proxy 和 Broker 可以分为 Local 模式和 Cluster 模式,一般情况下如果没有特殊需求,或者遵循从早期版本平滑升级的思路,可以选用Local模式。

  • 在 Local 模式下,Broker 和 Proxy 是同进程部署,只是在原有 Broker 的配置基础上新增 Proxy 的简易配置就可以运行。
  • 在 Cluster 模式下,Broker 和 Proxy 分别部署,即在原有的集群基础上,额外再部署 Proxy 即可。

​ 这里采用 Local 模式进行部署,即Broker 和 Proxy 同进程部署,过程如下:

一、安装JDK

​ 这里使用的 jdk 版本为1.8.0_291,安装包请自行下载,也可直接安装 jdk17,方便后续 RocketMQ Dashboard 的编译安装。

#解压
tar -xf jdk-8u291-linux-x64.tar.gz -C /usr/local/#配置环境变量
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk1.8.0_291
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=${JAVA_HOME}/bin:$PATH#使用环境变量生效
source /etc/profile.d/jdk.sh#查看版本
java -version

二、下载RocketMQ安装包并解压

#下载安装包
wget https://dist.apache.org/repos/dist/release/rocketmq/5.3.3/rocketmq-all-5.3.3-bin-release.zip
#解压
unzip rocketmq-all-5.3.3-bin-release.zip -d /app/
#重命名
mv /app/rocketmq-all-5.3.3-bin-release /app/rocketmq

三、启动 NameServer

(1) 创建service启动文件

vim /etc/systemd/system/mqnamesrv.service
[Unit]
Description=RocketMQ Nameserver
After=network.target[Service]
Type=simple
Environment=PATH=/usr/local/jdk1.8.0_291/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=JAVA_OPT_EXT=-Duser.home=/app/rocketmq
ExecStart=/app/rocketmq/bin/mqnamesrv
ExecStop=/app/rocketmq/bin/mqshutdown namesrv
Restart=on-failure
RestartSec=30s[Install]
WantedBy=multi-user.target

说明:

  • Type 一定要使用simple,使用 forking 会启动失败;
  • Environment 中设置 PATH 环境变量,并加入jdk的路径,使用 JAVA_HOME 环境是没用的,因为启动脚本里是使用 which javac 获取jdk路径的;
  • JAVA_OPT_EXT 是增加启动服务时额外的参数配置,-Duser.home=/app/rocketmq 是为了覆盖rocketmq的环境变量\({usre.home} (当前用户的家目录),控制日志的输出路径,默认是\){user.home}/logs/rocketmqlogs/ ,也可以通过修改 conf 文件夹下的 xx.logback.xml 文件来进行修改,但改的地方有点多。

(2) 启动 NameServer 服务

#加载配置文件
systemctl daemon-reload#启动
systemctl start mqnamesrv#设置开机自启
systemctl enable mqnamesrv

四、启动 Broker + Proxy

(1) 修改配置文件

vim /app/rocketmq/conf/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#增加以下三行
storePathRootDir = /app/rocketmq/store
storePathCommitLog = /app/rocketmq/store/commitlog
storePathConsumerQueue = /app/rocketmq/store/consumequeue

​ Broker 常用配置:参考 官方文档

参数名 默认值 说明
listenPort 10911 接受客户端连接的监听端口
namesrvAddr null nameServer 地址
brokerIP1 网卡的 InetAddress 当前 broker 监听的 IP
brokerIP2 跟 brokerIP1 一样 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
brokerName null broker 的名称
brokerClusterName DefaultCluster 本 broker 所属的 Cluster 名称
brokerId 0 broker id, 0 表示 master, 其他的正整数表示 slave
storePathCommitLog $HOME/store/commitlog/ 存储 commit log 的路径
storePathConsumerQueue $HOME/store/consumequeue/ 存储 consume queue 的路径
mappedFileSizeCommitLog 1024 * 1024 * 1024(1G) commit log 的映射文件大小
deleteWhen 04 在每天的什么时间删除已经超过文件保留时间的 commit log
fileReservedTime 72 以小时计算的文件保留时间
brokerRole ASYNC_MASTER SYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskType ASYNC_FLUSH SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。

(2) 创建service启动文件

vim /etc/systemd/system/mqbroker.service 
[Unit]
Description=RocketMQ Broker And Proxy
After=network.target[Service]
Type=simple
Environment=PATH=/usr/local/jdk1.8.0_291/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=JAVA_OPT_EXT=-Duser.home=/app/rocketmq
ExecStart=/app/rocketmq/bin/mqbroker -n localhost:9876 -c /app/rocketmq/conf/broker.conf --enable-proxy
ExecStop=/app/rocketmq/bin/mqshutdown broker
Restart=on-failure
RestartSec=30s[Install]
WantedBy=multi-user.target

说明:

  • Type、PATH 和 JAVA_OPT_EXT 同 nameserver 的说明;

  • ExecStart 中 -n 后接的是 nameserver 的连接地址,-c 指定的是 broker 的配置文件路径,--enable-proxy 是指启动proxy,即 broker 和 proxy 同进程部署;

  • proxy 默认读取的配置文件为 conf/rmq-proxy.json,如果 ExecStart 中不想加 -n localhost:9876,则同时需要在 broker.confrmq-proxy.json 文件中配置 nameserver 的连接地址,配置项为 namesrvAddr

  • proxy 默认占用的端口为 8080 和 8081,对应配置为remotingListenPortgrpcServerPort,如需要修改端口,在配置文件中增加这两下配置即可;如下所示:

    {
    "rocketMQClusterName": "DefaultCluster",
    "grpcServerPort": 7081,
    "remotingListenPort": 7080
    }

(3) 启动 broker + proxy 服务

#加载配置文件
systemctl daemon-reload#启动
systemctl start mqbroker#设置开机自启
systemctl enable mqbroker

五、RocketMQ Dashboard部署

5.1、docker方式部署

(1) 下载镜像

docker pull apacherocketmq/rocketmq-dashboard:latest

(2) 运行容器

docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8082:8082 -t apacherocketmq/rocketmq-dashboard:latest
  • 127.0.0.1:9876 替换成rocketmq 中配置的 nameserver 地址:端口号;

  • 镜像的端口号为 8082,官方文档里写的 8080,启动后访问不到,有点坑。

  • 当前 docker 版本为19.03.15,执行以上命令后容器启动不了,查看日志报错:Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.

    解决办法:

    1. 启动选项加上 --privileged=true 后,启动正常。
    2. 或启动选项使用 --security-opt seccomp=unconfined 也可以正常启动。
    3. 将 Docker 升级到 20.10.8 以上的版本。

(3) Dashboard 访问

使用浏览器输入 http://<服务器IP>:8082 ,即可打开页面。

5.2、源码编译部署

(1) 先决条件

  • 64bit OS, Linux/Unix/Mac is recommended;
  • 64bit JDK 17;
  • Maven 3.2.x;

这里使用的构建环境:系统 CentOS 8.5.2111,jdk-17.0.12(jdk-17.0.12_linux-x64_bin.tar.gz), Maven 3.5.4(yum install maven安装)

(2) 安装jdk-17.0.12

#解压
tar -xf jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local/#配置环境变量
vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk-17.0.12
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=${JAVA_HOME}/bin:$PATH#使用环境变量生效
source /etc/profile.d/jdk.sh#查看版本
java -version

(3) 下载源码

#项目地址
https://github.com/apache/rocketmq-dashboard#进入项目地址后,下载zip源码压缩包
https://github.com/apache/rocketmq-dashboard/archive/refs/heads/master.zip#解压安装包
unzip rocketmq-dashboard-master.zip#进入源码目录
cd rocketmq-dashboard-master

(4) 修改配置(选做)

#源码目录下的src/main/resources/application.yml文件可以修改相关选项的配置#1.修改nameserver地址,默认为127.0.0.1:9876,如只是用于本机也可以不用改
rocketmq.config.namesrvAddrs=127.0.0.1:9876#2.修改数据保存目录,默认为/tmp/rocketmq-console/data
rocketmq.config.dataPath=${user.home}/dashboard/data#3.开启页面登录,默认为false
rocketmq.config.loginRequired=true

1、登录校验

开启登录功能(rocketmq.config.loginRequired=true)时,确保 rocketmq.config.dataPath 定义的目录存在,并且该目录下创建登录配置文件"users.properties", 如果该目录下不存在此文件,则默认使用 resources/users.properties 文件。

users.properties文件格式为:

# 该文件支持热修改,即添加和修改用户时,不需要重新启动console
# 格式, 每行定义一个用户, username=password[,N]  #N是可选项,可以为0 (普通用户); 1 (管理员)  #定义管理员 
admin=admin,1#定义普通用户
user1=user1
user2=user2

2、权限较验

如果开启了登录功能,会按照登录的角色对访问的接口进行权限控制,确保rocketmq.config.dataPath定义的目录存在,并且该目录下创建访问权限配置文件"role-permission.yml",如果该目录下不存在此文件,则默认使用 resources/role-permission.yml 文件。

role-permission.yml文件格式:

# 该文件支持热修改,即添加和修改用户时,不需要重新启动console
# 格式,如果增加和删除接口权限,直接在列表中增加和删除接口地址即可。
# 接口路径配置支持通配符
# * 表示匹配0或多个不是/的字符
# ** 表示匹配0或多个任意字符
# ? 表示匹配1个任意字符rolePerms:# 普通用户Normal:- /rocketmq/nsaddr- /ops/*- /dashboard/**- /topic/*.query- /topic/sendTopicMessage.do- /producer/*.query- /message/*- /messageTrace/*- /monitor/*....

(5) Maven构建

#构建
mvn clean package -Dmaven.test.skip=true#构建完成后将 jar 包复制到 /app/rocketmq/dashboard/ 目录
mkdir /app/rocketmq/dashboard/
cp target/rocketmq-dashboard-2.1.1-SNAPSHOT.jar /app/rocketmq/dashboard/
  • 构建生成的jar包时默认连接的 namserver 地址为:127.0.0.1:9876,在构建前可以通过修改源码目录下 src/main/resources/application.properties 文件中的 rocketmq.config.namesrvAddr= 配置;

  • 如果构建时下载包的速度很慢,可以更改maven的镜像(maven's settings.xml)

alimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/central

(6) 创建数据目录及权限相关文件(选做,结合第4步)

#创建数据目录
mkdir /app/rocketmq/dashboard/data#创建用户文件,并添加管理员用户
vim /app/rocketmq/dashboard/data/users.properties
admin=Admin@123,1	#定义管理员账号与密码#创建权限较验文件,该文件针对的是普通用户的,如果没创建普通用户,可不创建
#此处复制的 resources/role-permission.yml 文件的内容
vim /app/rocketmq/dashboard/data/role-permission.yml
rolePerms:Normal:- /rocketmq/*.query- /ops/*.query- /dashboard/*.query- /topic/*.query- /topic/sendTopicMessage.do- /topic/list.queryTopicType- /producer/*.query- /message/*.query- /messageTrace/*.query- /monitor/*.query- /consumer/*.query- /cluster/*.query- /dlqMessage/*.query- /dlqMessage/exportDlqMessage.do- /dlqMessage/batchResendDlqMessage.do- /acl/*.query

注意:虽然说这两个文件支持热加载,但如果启动 dashboard 服务之前,没有提前创建好,默认还是读取 jar 包中默认的两个文件,也就是构建前 src/main/resources/ 目录下的 users.properties 和 role-permission.yml 文件,所以启动服务后再创建这两个文件是没效果的,需要再重启一下服务,建议启动前创建好。

(7) 创建service启动文件

vim /etc/systemd/system/mqdashboard.service
[Unit]
Description=RocketMQ Dashboard
After=network.target[Service]
Type=simple
Environment="JAVA_OPT=-Duser.home=/app/rocketmq -Xms2g -Xmx2g"
ExecStart=/usr/local/jdk-17.0.12/bin/java $JAVA_OPT -jar /app/rocketmq/dashboard/rocketmq-dashboard-2.1.1-SNAPSHOT.jar
Restart=on-failure
RestartSec=30[Install]
WantedBy=multi-user.target
  • user.home 参数变量用于控制日志的输出路径,默认为 ${user.home}/logs/dashboardlogs;

  • 注意 ExecStart 中的 $JAVA_OPT 不能写成 ${JAVA_OPT},原因如下:

    使用${JAVA_OPT} 时,systemd 可能会将变量值整体视为一个参数(例如 -Xms2g -Xmx2g ... 被当成一个完整的字符串传递给 Java),导致 JVM 无法解析多个参数而启动报错;

    使用 $JAVA_OPT 时,变量值会被正确拆分为多个独立参数(-Xms2g-Xmx2g-Duser.home=...),符合 JVM 的参数解析要求。

(8) 启动 Dashboard 服务

#加载配置文件
systemctl daemon-reload#启动
systemctl start mqdashboard#设置开机自启
systemctl enable mqdashboard

(9) Dashboard 访问

使用浏览器输入 http://<服务器IP>:8082 ,即可打开页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/954519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年11月电子站牌权威推荐榜:探索行业领先者与创新解决方案

2025年电子站牌品牌:探索行业领先者与创新解决方案 文章摘要 随着智慧城市和公共交通智能化的快速发展,电子站牌行业在2025年呈现出高速增长趋势,市场规模预计达到百亿元级别。电子站牌不仅提升城市形象,还通过实时…

基础排序算法(七)归并排序

基础排序算法(七)归并排序一 归并排序 归并排序是一种基于分治法的高效、稳定的排序算法。其核心思想是将两个或多个已排序的序列合并成一个新的有序序列。 1.1 算法特性 归并排序特性总结特性 说明核心思想 分治法:…

2025 最新外延片实力厂家口碑排行榜:年销 5.5 万片企业与定制服务能力全景对比及优质品牌最新推荐 MOSFET外延片/射频器件外延片/硅外延片公司推荐

引言 半导体外延片作为功率器件、光电器件等核心领域的基础材料,其质量稳定性与技术适配性直接影响下游产业发展。近期,行业权威协会开展外延片厂家综合测评,测评数据显示,仅 35% 的企业能同时满足宽禁带半导体外延…

微信小程序同城配送支持的城市列表

非常逆天的一点,同城配送接口默认需要加解密,但是又不知道是否支持当前城市,网上搜索无果后只能加解密后获取1、先贴一下参考链接 感谢分享,按照攻略很顺利地完成了加解密,最后对返回结果解密时需要一个resp_ts,…

2025年11月公交站台生产厂家推荐榜:揭秘顶级公交站台生产厂家江苏兰太的成功秘诀

2025年11月公交站台生产厂家推荐榜:揭秘顶级公交站台生产厂家江苏兰太的成功秘诀 摘要 2025年,公交站台生产厂家行业正迎来智能化、环保化的发展浪潮,随着城市化进程加速和公共交通需求增长,厂家们专注于创新材质、…

2025 年半导体晶片生产厂家最新推荐榜单:专利技术与规模化供货能力深度解析及选购指南

引言 当前半导体产业正迎来宽禁带材料替代浪潮,碳化硅(SiC)、氮化镓(GaN)等材料因适配新能源、光电子等高端领域需求,市场规模持续扩大,2024 年第四季度全球晶圆厂装机容量已超每季度 4200 万片晶圆(300 毫米晶…

2025年11月新能源汽车线束生产厂家前十榜单:东莞众晟强电子位居榜首

东莞众晟强电子:2025年新能源汽车线束生产厂家首选 摘要 2025年,随着全球新能源汽车市场的迅猛增长,新能源汽车线束作为关键组件,其生产厂家竞争日益激烈。行业趋势指向智能化、高效化和品质化,厂家需具备先进技术…

条件运算符

p=f=3.0?a<=c:a>=c表示p=f=3.0是真则执行a<=c,否则执行a>=c奇偶数的判断:&为逻辑与(全一才出一)|为逻辑或(全零才出零)^为异或(同为零,异为一)<<为按位左移 例如a=a<<2 将a的二进…

2025 年防静电地板源头厂家最新推荐榜,技术实力与市场口碑深度解析间 / 生产防静电地板 / 防静电活动地板 / 抗静电地板公司推荐

引言 随着数字化场景对防静电需求的持续升级,防静电地板的性能稳定性、耐用性及服务保障成为采购核心考量。本次推荐榜依托行业权威协会近一年测评数据生成,测评覆盖 120 余家源头厂家,从生产规模、技术研发、质量管…

2025年10月机器人线束生产工厂/厂家前十推荐榜单:东莞众晟强电子位居榜首

2025年市场上机器人线束生产工厂推荐榜单:东莞众晟强电子位居榜首 摘要 随着工业4.0和智能制造的快速发展,机器人线束作为核心连接组件,其市场需求在2025年预计增长20%以上,行业竞争日趋激烈。本文基于2025年市场数…

centos部署 KVM 虚拟化平台(保姆级)

确认CPU支持虚拟化技术: 执行命令检查CPU是否支持Intel VT-x或AMD-V: grep -E vmx|svm /proc/cpuinfo 如果输出中包含vmx(Intel)或svm(AMD),则表示CPU支持虚拟化技术。 关闭NetworkManager服务:为避免不明错误…

2025年市面上候车亭厂家推荐榜:探索行业领先的解决方案与创新技术

2025年市面上候车亭厂家:探索行业领先的解决方案与创新技术 文章摘要 2025年候车亭行业持续向环保化、智能化方向发展,市场需求增长迅速。本文基于行业数据和分析,排名前十的候车亭厂家,供您参考选择。排名综合考虑…

2025年防盗门源头厂家权威推荐榜单:精雕铅门/铸铝门/进户门源头厂家精选

在居家安全需求升级与建筑美学融合发展的双重驱动下,防盗门行业正经历从基础防护到“安全-美学-智能”一体化的深刻变革。据行业数据显示,2025年中国防盗门市场渗透率已达92%,其中高端铸铝门、艺术雕花门等品类增长…

2025年11月机器人线束生产厂家推荐前十榜单:东莞众晟强电子领跑行业

2025年机器人线束生产厂家推荐排行榜:东莞众晟强电子领跑行业 文章摘要 随着工业4.0和智能制造的快速发展,机器人线束作为核心连接组件,市场需求持续增长。2025年,行业将更加注重技术革新、品质可靠性和供应链效率…

RTOS随笔之FreeRTOS

RTOS随笔之FreeRTOS@目录为什么使用RTOS?1. 先考虑OS有什么特点?2. 再考虑什么情况下使用OS?FreeRTOS调试技巧任务管理1. 任务调度流程2. 任务栈大小,栈溢出检测3. 中断管理4. 内存管理FreeRTOS API接口1. 任务创…

LTspice仿真命令

LTspice仿真命令交流扫描 命令 .ac <oct, dec, lin> 参数1:扫描方式(oct 八倍频 dec 十倍频 lin 线性扫描) 参数2: 扫描数 参数3: 起始频率 参数4: 终止频率 交流小信号分析,电源设置为小信号 示例 …

使用pyqt5 pyserial TTS模型vosk开发的语音串口工具

项目概述 这是一个集成了语音识别和串口通信功能的智能控制工具,旨在通过自然语言语音指令实现对硬件设备的远程控制。该工具采用pyqt5 GUI 界面设计,支持多种串口参数配置,能够实时识别语音指令并通过串口发送控制…

AI教我一条SQL实现明细转树形结构

AI教我一条SQL实现明细转树形结构 1. 原始数据序号 COUNTRY PROVINCE CITY GAME1 中国 广东 深圳 地心侠士2 中国 广东 广州 地心侠士3 中国 江苏 南京 地心侠士4 美国 加州 洛杉矶 地心侠士2. 目标数据序号 节点名称 …

十分钟读懂 Deepseek MTP(Multi-Token Prediction)

传统的大语言模型采用的训练目标是 Next-Token Prediction (NTP),即在位置 t 上预测下一个 token (t+1)。而 Multi-Token Prediction (MTP) 的核心思想在于:不仅预测下一个 token,而是能够同时预测多个未来的 token…

2025年度中国工业制冷设备品牌排名:东洋制冷机靠不靠谱

TOP1推荐:深圳市东洋冷冻设备有限公司 评价指数:★★★★★ 口碑评分:99分 行业表现:A+++++级 介绍: 深圳市东洋冷冻设备有限公司(简称东洋制冷)电话号码:13827472315,成立于1993年(前身为深圳市东洋工业冷冻…