You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java容器连接RabbitMQ容器出现Connection refused问题求助

问题描述

我有一个Java容器需要从RabbitMQ容器获取消息,使用的连接代码如下:

ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("rabbit2");
    factory.setPort(5673);
    factory.setUsername("guest");
    factory.setPassword("guest");

    log.info("Got here!");

    Connection connection = null;

    try {
      connection = factory.newConnection("Connection1");
    } catch (Exception e) {
      log.error(e.getMessage(), e);
      throw e;
    }

依赖库配置:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>4.0.0</version>
</dependency>

通过Docker Compose部署,RabbitMQ容器配置:

output_mb:
    image: rabbitmq:3-management
    hostname: rabbit2
    container_name: output_mb
    ports:
        - 5673:5672
        - 15673:15672
    volumes:
        - "./output_mb/rabbitmq.config:/etc/rabbitmq/rabbitmq.config"
        - "./output_mb/definitions.json:/etc/rabbitmq/definitions.json"
    networks:
        - common_network

Java容器配置:

pollution_dashboard:
    container_name: pollution_dashboard
    image: pollution_dashboard:latest
    restart: on-failure
    hostname: pollution_dashboard
    depends_on:
        - input_mb
        - output_mb
    ports:
        - 8080:8080
    build:
        context: ./pollution_dashboard/pollution_dashboard
        dockerfile: ./Dockerfile
    networks:
        - common_network

运行Docker Compose后,Java服务持续出现Connection refused错误,但栈中其他语言的服务可正常与RabbitMQ实例通信,请问问题可能出在哪里?

可能的问题点
  • 端口配置错误:Docker Compose中RabbitMQ的端口映射5673:5672是将宿主机5673端口映射到容器内部的5672端口。容器间通信时,应直接使用RabbitMQ容器内部的端口5672,而非宿主机的映射端口5673。其他语言服务能正常通信,大概率是它们使用了5672端口,而Java代码错误配置为5673,这是最可能的核心问题。
  • RabbitMQ用户访问限制:检查挂载的rabbitmq.config,确认是否存在guest用户仅允许localhost访问的配置。RabbitMQ默认限制guest用户只能从localhost连接,若未修改该配置,Java容器以guest用户从容器网络连接会被拒绝。其他服务能正常通信可能是因为使用了其他授权用户,或配置文件已放开该限制。
  • 服务启动时机问题:depends_on仅保证容器启动顺序,不确保RabbitMQ服务完全就绪。Java服务可能在RabbitMQ初始化完成前就尝试连接,导致连接拒绝。可在Java代码中添加连接重试逻辑,或为RabbitMQ配置healthcheck,让Java容器等待RabbitMQ健康后再启动。
  • 依赖版本兼容性:当前使用的amqp-client 4.0.0版本与RabbitMQ 3-management镜像需确认版本兼容。虽然理论上兼容,但如果RabbitMQ是较新的3.x版本,可能存在兼容性问题,建议尝试升级amqp-client到5.x系列的稳定版本。

内容的提问来源于stack exchange,提问作者Radu Aramă

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:22:48