• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
黄洪波写点东西的地方
博客园    首页    新随笔    联系   管理    订阅  订阅
windows docker安装rocketmq之踩坑记

安装官方文档,无论使用docker 还是使用docker-compose启动容器都报错,错误如下:

Exception in thread "main" org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout。

网上找了一圈,没有找到合适的文档,直接贴错误,答案也是牛头不对马嘴,也许是关键词不对。

后来直接将环境,配置,代码,错误都丢给AI,给出了12345几种可能,反正最终原因如下:

-------

非常好,您已经成功运行了 RocketMQ 集群,这时需要配置外部访问。我注意到:

  1. RocketMQ Broker 在容器网络中的地址是 172.18.0.4:10911
  2. 宿主机的 IP 地址是 10.78.0.6

这里存在一个常见的 RocketMQ 配置问题:当外部客户端尝试连接 RocketMQ 时,nameserver 会返回 broker 的内部地址(172.18.0.4:10911),但这个地址在宿主机网络或外部网络中是无法直接访问的。

在Windows环境中,Docker Desktop默认使用host.docker.internal作为宿主机访问地址,而非localhost。

---

这里我就明白了,可以使用宿主机的IP地址配置brokerIP1。

 

解决方案:

先说本机配置:

ipconfig

以太网适配器 vEthernet (WSL):
   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::714b:93ba:2972:ba80%55
   IPv4 地址 . . . . . . . . . . . . : 172.27.112.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :


无线局域网适配器 WLAN:
   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : fde2:8d42:8f0:5100:8375:6265:bacd:375
   临时 IPv6 地址. . . . . . . . . . : fde2:8d42:8f0:5100:c052:9d50:a600:5464
   本地链接 IPv6 地址. . . . . . . . : fe80::9f50:8521:1234:304%5
   IPv4 地址 . . . . . . . . . . . . : 192.168.3.34
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : fe80::2681:c7ff:fe51:f008%5
                                       192.168.3.1

所以最终解决方案如下:

使用docker-compose方案启动

docker-compose.yml配置如下:

version: '3.8'
services:
  namesrv:
    image: apache/rocketmq:5.3.1
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    networks:
      - rocketmq
    command: sh mqnamesrv
  broker:
    image: apache/rocketmq:5.3.1
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    volumes:
      - ./broker.conf:/home/rocketmq/rocketmq-5.3.1/conf/broker.conf
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    depends_on:
      - namesrv
    networks:
      - rocketmq
    command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.1/conf/broker.conf
  proxy:
    image: apache/rocketmq:5.3.1
    container_name: rmqproxy
    networks:
      - rocketmq
    depends_on:
      - broker
      - namesrv
    ports:
      - 8080:8080
      - 8081:8081
    restart: on-failure
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    command: sh mqproxy
  dashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: rmqdashboard
    ports:
      - 9090:8080  # 修改宿主机端口为9090,容器内端口保持8080不变
    environment:
      - JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876
    depends_on:
      - namesrv
    networks:
      - rocketmq

networks:
  rocketmq:
    driver: bridge

同目录下创建broker.conf文件,内容如下:

brokerIP1=172.27.112.1
#
brokerIP1也可以设置为WLAN ip
#考虑到我经常切换网络,且wsl ip为docker虚拟机固定ip,故设置该ip更妥当
namesrvAddr=rmqnamesrv:9876 autoCreateTopicEnable=true

执行 docker-compose up -d命令启动服务,启动之后访问rocketmq-dashboard的9090端口

http://172.27.112.1:9090/#/

成功。

 

posted on 2025-03-07 23:25  红无酒伤  阅读(377)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3