Docker部署RocketMQ时Broker IP地址问题及解决方案

Docker部署RocketMQ时Broker IP地址问题及解决方案

问题描述

在最近的一次项目中,为了方便,项目中所用到的第三方服务都使用Docker容器化部署。当部署RocketMQ时,出现了生产者发送消息到队列,但观察控制台却没有接收到消息的情况。

问题现象

在RocketMQ控制台中观察到Broker集群的地址为Docker内部生成的内网IP:

BrokerNO.AddressVersionProduce Message TPSConsumer Message TPSYesterday Produce CountYesterday Consume CountToday Produce CountToday Consume CountOperation
049c9d62b8a80(master)172.17.0.6:10911V4_4_00.000.000000

问题原因

使用Docker部署时,Broker默认注册的是Docker容器内部生成的内网IP地址,导致外部生产者无法正确连接到Broker服务。

解决方案

方法一:修改Broker配置文件

  1. 进入Broker容器

    docker exec -it broker /bin/bash
    
  2. 修改Broker配置文件

    bash

    vi /opt/rocketmq/conf/broker.conf
    
  3. 添加公网IP配置

    properties

    brokerIP1 = 你的公网地址
    
  4. 重启Broker服务

    # 在宿主机操作
    docker restart broker
    

方法二:使用Docker启动参数

docker run -d \
  --name broker \
  -p 10911:10911 \
  -p 10909:10909 \
  -e "NAMESRV_ADDR=你的公网IP:9876" \
  -e "BROKER_IP=你的公网IP" \
  -v /docker/rocketmq/broker/conf/broker.conf:/opt/rocketmq/conf/broker.conf \
  rocketmqinc/rocketmq:latest \
  sh mqbroker -n 你的公网IP:9876 -c /opt/rocketmq/conf/broker.conf

验证结果

修改配置并重启Broker后,在RocketMQ控制台中观察到的Broker地址应该变为:

BrokerNO.AddressVersion
049c9d62b8a80(master)你的公网IP:10911V4_4_0

总结

Docker部署RocketMQ时,由于网络隔离的特性,Broker默认会注册容器内部IP地址。通过显式配置brokerIP1参数,可以强制Broker使用公网IP地址进行注册,从而解决生产者无法连接的问题。

这种方法确保了外部应用程序能够正确发现和连接到RocketMQ Broker服务,保证了消息的正常生产和消费。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值