RocketMQ配置全解
- NAME SERVER
- 配置
- 启动
- BROKER SERVER
- 配置
- ACL配置(`aclEnable=true`时配置)
- plain_acl.yml
- tools.yml
- 启动
- RocketMQ Dashboard
- 下载源码
- 调整配置
- users.properties
- 打包
- 启动
- 访问
基本覆盖常用配置,如有需要继续补充
RocketMQ主要有NAME SERVER
、BROKER SERVER
,更详细参考官方架构介绍
NAME SERVER
配置
一般就是改个端口,在rocket目录下conf目录中创建文件nameserver.conf
内容如下
listenPort=端口号
启动
启动时,指定配置文件
.\bin\mqnamesrv.cmd -c .\conf\nameserver.conf
BROKER SERVER
配置
在rocket目录下conf目录中broker.conf
配置,支持的配置项如下,如果要使用身份鉴权aclEnable=true
必须配置,如需开放防火墙端口,注意如下端口配置
# 所属集群名字
brokerClusterName = MQ_Cluster
# broker名字,注意此处不同的配置文件填写的不一样
brokerName = broker-a
# 0 表示 Master,>0 表示 Slave
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 当前broker监听的IP地址 多网卡的时候需要
brokerIP1=127.0.0.1
# Broker 对外服务的监听端口
listenPort=10911
#主要用于slave同步master 默认listenPort - 2
fastListenPort=10909
#haService中使用 默认listenPort + 1
haListenPort=10912
# 鉴权
aclEnable=true
# nameServer地址,分号分割
namesrvAddr=127.0.0.1:9876
# 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
# 删除文件时间点,默认凌晨 4点
deleteWhen=03
# 文件保留时间,默认 48 小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/rocketmq/store
# commitLog 存储路径
storePathCommitLog=/rocketmq/store/commitlog
# 消费队列存储路径存储路径
storePathConsumeQueue=/rocketmq/store/consumequeue
# 消息索引存储路径
storePathIndex=/rocketmq/store/index
# checkpoint 文件存储路径
storeCheckpoint=/rocketmq/store/checkpoint
# abort 文件存储路径
abortFile=/rocketmq/store/abort
# 限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
# Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
# 刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
# 发消息线程池数量
#sendMessageThreadPoolNums=128
# 拉消息线程池数量
#pullMessageThreadPoolNums=128
ACL配置(aclEnable=true
时配置)
在aclEnable=true
时配置
plain_acl.yml
plain_acl.yml这个配置文件是动态生效的,修改后会被MQ动态加载,即时生效,注意修改
globalWhiteRemoteAddresses:
accounts:
- accessKey: RocketMQ
secretKey: 12345678
whiteRemoteAddress:
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- TopicTest=PUB
groupPerms:
# the group should convert to retry topic
- oms_consumer_group=DENY
- accessKey: admin
secretKey: 12345678
whiteRemoteAddress:
# if it is admin, it could access all resources
admin: true
# RocketMQ有个bug,admin默认权限不对,所以下面默认给发布和订阅权限
defaultTopicPerm: PUB|SUB
defaultGroupPerm: PUB|SUB
上面的配置示例,结果为:
- PUB是发布权限,SUB是订阅权限、也就是消费权限,按需配置,可以分发布用户和订阅用户,也可以一个用户拥有PUB|SUB权限
- 用户RocketMQ普通用户,分配的权限为只能发送TopicTest的消息,其他topic无权限发送;拒绝oms_consumer_group消费组的消息消费,其他消费组默认可消费。
- 用户admin是管理员用户,权限最大
tools.yml
accessKey: 普通用户accessKey
secretKey: 普通用户secretKey
启动
启动时,指定配置文件
.\bin\mqbroker.cmd -c .\conf\broker.conf
RocketMQ Dashboard
下载源码
https://github.com/apache/rocketmq-dashboard.git
调整配置
调整配置文件src/main/resources/application.yml
中的配置,如果开启了ACL,注意配置accessKey
、secretKey
,建议配置admin的账户,不然有些功能没有权限使用,然后loginRequired
设置为true,编辑src/main/resources/users.properties
Dashboard用户信息,users.properties
配置说明见下文
server:
port: 9866 # Dashboard端口号
servlet:
encoding:
charset: UTF-8
enabled: true
force: true
## SSL setting
# ssl:
# key-store: classpath:rmqcngkeystore.jks
# key-store-password: 11
# key-store-type: PKCS12
# key-alias: rmqcngkey
……
rocketmq:
config:
# if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, default localhost:9876
# configure multiple namesrv addresses to manage multiple different clusters
# RocketMQ服务列表
namesrvAddrs:
- 127.0.0.1:9876
#- 127.0.0.2:9898
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
isVIPChannel: true
# timeout for mqadminExt, default 5000ms
timeoutMillis:
# rocketmq-console's data path:dashboard/monitor
dataPath: /rocketmq-console/data
# set it false if you don't want use dashboard.default true
enableDashBoardCollect: true
# set the message track trace topic if you don't want use the default one
msgTrackTopicName:
ticketKey: ticket
# must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
loginRequired: false # 安全起见 建议设置为true并配置用户信息
useTLS: false
# set the accessKey and secretKey if you used acl
accessKey: "用户accessKey" # if version > 4.4.0
secretKey: "用户secretKey" # if version > 4.4.0
……
users.properties
# username=password[,N]
# N 可选参数, 0 (普通用户); 1 (Admin) 使用的时候直接英文逗号加数字,没有括号,下面例子
# Define Admin
admin=密码,1
# Define Users
user1=user1,0
打包
mvn clean package -DskipTests=true
启动
java -jar .\target\rocketmq-dashboard-1.0.1-SNAPSHOT.jar
访问
- 根据自己配置的Dashboard端口号访问
127.0.0.1:9866