安装官方文档,无论使用docker 还是使用docker-compose启动容器都报错,错误如下:
Exception in thread "main" org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout。
网上找了一圈,没有找到合适的文档,直接贴错误,答案也是牛头不对马嘴,也许是关键词不对。
后来直接将环境,配置,代码,错误都丢给AI,给出了12345几种可能,反正最终原因如下:
-------
非常好,您已经成功运行了 RocketMQ 集群,这时需要配置外部访问。我注意到:
- RocketMQ Broker 在容器网络中的地址是 
172.18.0.4:10911 - 宿主机的 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/#/
成功。

                    
                
                
            
        
浙公网安备 33010602011771号