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]

Reply via email to