GitHub user huangjuncong created a discussion: rocketmq5.3.2 加上proxy
组件后,报错,broker注册地址偶尔是组件容器IP,不断和宿主IP切换
mq1 compose:
`version: '3.8'
services:
rmqnamesrv:
image: apache/rocketmq:5.3.2
container_name: rmqnamesrv
ports:
- "9876:9876"
volumes:
# 将日志挂载到 /data
- /data/rocketmq/namesrv/logs:/home/rocketmq/logs
# GC 日志挂载
- /data/rocketmq/namesrv/gclogs:/home/rocketmq/gclogs
networks:
- rocketmq
extra_hosts:
- "mq1:192.62.31.18"
- "mq2:192.62.31.19"
- "mq3:192.62.31.20"
environment:
- JAVA_OPT_EXT=-Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=128m -XX:MaxGCPauseMillis=100 -XX:+PrintGC
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100M
-Xloggc:/home/rocketmq/gclogs/gc.log
command: sh mqnamesrv
restart: unless-stopped
user: "3000:3000"
deploy:
resources:
limits:
cpus: '0.5'
memory: 1G
reservations:
cpus: '0.25'
memory: 512M
rmqbroker-a:
image: apache/rocketmq:5.3.2
container_name: rmqbroker-a
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
- NAMESRV_ADDR=mq1:9876;mq2:9876;mq3:9876
- JAVA_OPT_EXT=-Xms6g -Xmx6g -Xmn3g -XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m -XX:MaxGCPauseMillis=200 -XX:MaxDirectMemorySize=1g
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
-Xloggc:/home/rocketmq/gclogs/gc.log
depends_on:
- rmqnamesrv
extra_hosts:
- "mq1:192.62.31.18"
- "mq2:192.62.31.19"
- "mq3:192.62.31.20"
volumes:
# 配置文件从 /opt/rocketmq 加载
-
./broker-a/conf/broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf
# 将日志和存储挂载到 /data
- /data/rocketmq/broker-a/logs:/home/rocketmq/logs
- /data/rocketmq/broker-a/store:/home/rocketmq/store
# GC 日志挂载
- /data/rocketmq/broker-a/gclogs:/home/rocketmq/gclogs
networks:
- rocketmq
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
restart: unless-stopped
user: "3000:3000"
deploy:
resources:
limits:
cpus: '3.0'
memory: 10G
reservations:
cpus: '2.0'
memory: 8G
rmqbroker-b-s:
image: apache/rocketmq:5.3.2
container_name: rmqbroker-b-s
ports:
- "11909:10909" # Slave B需要不同端口
- "11911:10911"
- "11912:10912"
extra_hosts:
- "mq1:192.62.31.18" # 示例:mq1 映射到 192.62.31.18
- "mq2:192.62.31.19" # 示例:mq2 映射到 192.62.31.19
- "mq3:192.62.31.20" # 示例:mq3 映射到 192.62.31.20
environment:
- NAMESRV_ADDR=mq1:9876;mq2:9876;mq3:9876
- JAVA_OPT_EXT=-Xms3g -Xmx3g -Xmn2g -XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=128m -XX:MaxGCPauseMillis=200 -XX:MaxDirectMemorySize=512m
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100M
-Xloggc:/home/rocketmq/gclogs/gc.log
depends_on:
- rmqnamesrv
volumes:
# 配置文件从 /opt/rocketmq 加载
-
./broker-b-s/conf/broker.conf:/home/rocketmq/rocketmq-5.3.2/conf/broker.conf
# 将日志和存储挂载到 /data
- /data/rocketmq/broker-b-s/logs:/home/rocketmq/logs
- /data/rocketmq/broker-b-s/store:/home/rocketmq/store
# GC 日志挂载
- /data/rocketmq/broker-b-s/gclogs:/home/rocketmq/gclogs
networks:
- rocketmq
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.2/conf/broker.conf
restart: unless-stopped
user: "3000:3000"
deploy:
resources:
limits:
cpus: '2.0'
memory: 6G
reservations:
cpus: '1.0'
memory: 4G
rmqproxy-a:
image: apache/rocketmq:5.3.2
container_name: rmqproxy-a
networks:
- rocketmq
depends_on:
- rmqnamesrv
- rmqbroker-a
ports:
- "8080:8080" # Proxy HTTP
- "8081:8081" # Proxy gRPC
restart: unless-stopped
extra_hosts:
- "mq1:192.62.31.18" # 示例:mq1 映射到 192.62.31.18
- "mq2:192.62.31.19" # 示例:mq2 映射到 192.62.31.19
- "mq3:192.62.31.20" # 示例:mq3 映射到 192.62.31.20
user: "3000:3000"
volumes:
# 配置文件从 /opt/rocketmq 加载
- ./proxy/conf/proxy.json:/home/rocketmq/rocketmq-5.3.2/conf/proxy.json
# 将日志挂载到 /data
- /data/rocketmq/proxy/logs:/home/rocketmq/logs
# GC 日志挂载
- /data/rocketmq/proxy/gclogs:/home/rocketmq/gclogs
environment:
- NAMESRV_ADDR=mq1:9876;mq2:9876;mq3:9876
- JAVA_OPT_EXT=-Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=128m -XX:MaxGCPauseMillis=100 -XX:MaxDirectMemorySize=512m
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100M
-Xloggc:/home/rocketmq/gclogs/gc.log
command: sh mqproxy -pc /home/rocketmq/rocketmq-5.3.2/conf/proxy.json
deploy:
resources:
limits:
cpus: '1.0'
memory: 4G
reservations:
cpus: '0.5'
memory: 2G
networks:
rocketmq:
name: rocketmq
driver: bridge`
broker.conf:
`# ========================================
# RocketMQ Broker 配置文件 (Master A 示例)
# ========================================
# Broker 名称,用于标识一个 Broker 组。Master 和 Slave 的名称必须相同。
brokerName=broker-a
# Broker ID,用于区分 Broker 组内的 Master 和 Slave。
# 0 表示 Master。
# 大于 0 的数字表示 Slave,例如 1, 2, 3...
brokerId=0
# NameServer 地址列表,多个地址用分号隔开。
# 客户端(Producer/Consumer)和 Broker 都需要连接 NameServer 来获取路由信息。
namesrvAddr=mq1:9876;mq2:9876;mq3:9876
# Broker 的角色。
# ASYNC_MASTER: 异步复制 Master,消息先写入 Master 内存,然后异步复制到 Slave。
# SYNC_MASTER: 同步双写 Master,消息需要同时写入 Master 和 Slave 才算成功。
# SLAVE: 从节点,从 Master 同步数据。
brokerRole=ASYNC_MASTER
# 刷盘策略。
# SYNC_FLUSH: 同步刷盘,消息写入内存后,必须立即刷写到磁盘,然后返回成功。可靠性最高,性能稍低。
# ASYNC_FLUSH: 异步刷盘,消息写入内存后,立即返回成功,然后异步刷写到磁盘。性能较高,可靠性稍低。
flushDiskType=SYNC_FLUSH
# 是否允许自动创建 Topic。
# 生产环境建议设置为 false,由运维人员手动创建 Topic,以便更好地管理。
autoCreateTopicEnable=false
# 是否允许自动创建订阅组 (Subscription Group)。
# 生产环境建议设置为 false,由运维人员手动创建,以便更好地管理。
autoCreateSubscriptionGroup=false
# 存储根目录路径。
storePathRootDir=/home/rocketmq/store
# CommitLog 存储路径。CommitLog 是存储消息主体的物理文件。
storePathCommitLog=/home/rocketmq/store/commitlog
# 消费队列 (ConsumeQueue) 存储路径。ConsumeQueue 是消息的逻辑队列索引。
storePathConsumeQueue=/home/rocketmq/store/consumequeue
# 消息索引 (IndexFile) 存储路径。用于根据 Key 查找消息。
storePathIndex=/home/rocketmq/store/index
# SSL 相关文件存储路径(如果启用了 SSL)。
storePathSslFile=/home/rocketmq/store/ssl
# VIP通道开启
vipChannelEnabled=true
# 关键:禁用 Broker 自动探测地址(5.x 支持)
autoDetectAddress=false
# Broker 监听的端口。
listenPort=10911
# HA 端口(默认 10909,主从同步用)
#haListenPort=10909
# 文件删除时间点。默认凌晨 4 点。
deleteWhen=04
# 文件保留时间,单位为小时。默认 48 小时。
fileReservedTime=48
# CommitLog 每个文件的大小,单位为字节。默认 1GB。
mapedFileSizeCommitLog=1073741824
# ConsumeQueue 每个文件的大小,单位为字节。默认约 5.72MB (300000 * 20 Bytes)。
mapedFileSizeConsumeQueue=300000
# 定时检测物理文件磁盘空间使用率的阈值。超过此阈值,会触发清理机制。
diskMaxUsedSpaceRatio=88
# 当物理文件磁盘空间不足时,清理文件的最小页数。
flushCommitLogLeastPages=1
# 定时将 CommitLog 内存中的数据刷写到磁盘的时间间隔,单位为毫秒。
flushCommitLogThoroughInterval=10000
# 当 CommitLog 内存中的数据达到指定页数时,强制刷写到磁盘的最小页数。
commitCommitLogLeastPages=1
# 定时将 CommitLog 内存中的数据强制刷写到磁盘的时间间隔,单位为毫秒。
commitCommitLogThoroughInterval=200
# 当消费队列文件磁盘空间不足时,刷写队列文件的最小页数。
flushConsumeQueueLeastPages=1
# 定时将 ConsumeQueue 内存中的数据刷写到磁盘的时间间隔,单位为毫秒。
flushConsumeQueueThoroughInterval=60000
# 限制单条消息的最大大小,单位为字节。默认 4MB (4 * 1024 * 1024)。
maxMessageSize=4194304
# VIP 通道的 IP 地址。必须明确设置,否则会使用自动检测的 IP。
brokerVIP1=mq1
# 核心:显式指定宣告地址,格式为“mq1:监听端口”
advertiseAddr=mq1:10911
# Broker 的 IP 地址。如果机器有多个网卡,请设置正确的 IP 地址。
# 这个 IP 会注册到 NameServer,客户端通过这个 IP 连接 Broker。
brokerIP1=mq1
brokerIP2=mq1
# 是否开启消息索引功能。
messageIndexEnable=true
# 消息索引文件的时间间隔,单位为毫秒。默认 60 秒。
messageIndexInterval=60000
# 是否开启长轮询模式,用于优化 Consumer 拉取消息的延迟。
longPollingEnable=true
# Slave 节点是否允许读取数据。
# 如果设置为 true,Consumer 可以从 Slave 读取消息,可以分担 Master 的压力,但可能读到旧数据。
# 如果设置为 false,Consumer 只能从 Master 读取。
slaveReadEnable=false
# 是否允许 Slave 在 Master 宕机时自动切换为 Master。
# 通常不建议开启,因为可能会导致数据不一致。
enableSlaveActingMaster=false
# 消费队列的读队列数量。影响 Topic 的读并发度。
readQueueNums=16
# 消费队列的写队列数量。影响 Topic 的写并发度。
writeQueueNums=16
# 发送消息线程池的核心线程数。
sendMessageThreadPoolNums=128
# 拉取消息线程池的核心线程数。
pullMessageThreadPoolNums=12
#开启消息轨迹
traceTopicEnable=true
# 启用内置 Proxy(关键)
enableBuiltInProxy=true
enableProxyProtocol=true
proxyMode=local
# Proxy 的 gRPC 端口(客户端连接用,默认 8081,确保不与其他端口冲突)
proxyGrpcServerPort=8081
# Proxy 的 HTTP 端口(可选,默认 8080)
proxyHttpServerPort=8080
# Proxy 宣告地址(客户端连接的地址,必须是宿主机 IP:grpc 端口)
proxyAdvertiseAddr=mq1:8081`
proxy.json:
`{
"namesrvAddr": "mq1:9876;mq2:9876;mq3:9876",
"proxyMode": "local",
"grpcServerPort": 8081,
"remotingListenPort": 8080,
"rocketMQClusterName": "DefaultCluster"
}`
<img width="1888" height="703"
alt="ROCKETMQ_ff57ee50-8c26-448d-984e-ad8b827bbdef"
src="https://github.com/user-attachments/assets/0f798172-1a7f-4b9a-8d7c-dabc017daec0"
/>
图中报错是连到mq3 proxy-c 容器IP了
broker地址莫名奇妙变成容器IP,如下图:
<img width="1885" height="613" alt="image"
src="https://github.com/user-attachments/assets/513e6ac9-e36a-4f24-b850-ef13c9523744"
/>
GitHub link: https://github.com/apache/rocketmq/discussions/9814
----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]