RabbitMQ Java 客户端:连接被拒绝

RabbitMQ Java client: Connection refused

我在 WSL2

中有一张 rabbitmq:management docker 图片 运行

Note that I do not have Docker Desktop installed! I am running docker inside WSL2, without Docker Desktop

我可以访问 localhost:15672127.0.0.1:15672[::1]:15672 以毫无问题地访问管理界面,因此从我的浏览器到 docker 服务的主要连接在 WSL2 中工作。

但是,在尝试连接 RabbitMQ Java 客户端库时,我总是会遇到 connection refused 错误:

try {
    var port = Env.get(EnvVars.EVENTING_PORT, "5672");
    var host = Env.get(EnvVars.EVENTING_HOST, "localhost");

    var factory = new ConnectionFactory();
    factory.setHost(host);
    factory.setPort(Integer.parseInt(port));

    LOG.info("Connecting on [{}:{}]", host, port);
    connection = factory.newConnection();
} catch (Exception exc) {
    LOG.error("Could not connect", exc);
}

异常来自 java.net,所以一定是某种网络错误。

但是:我在同一个 WSL2 docker 运行 中也有 redis,我可以通过 localhost:6937 连接到它,没有任何问题。

CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                                                        NAMES
47a58db1aa67   rabbitmq:management   "docker-entrypoint.s…"   18 minutes ago   Up 18 minutes   4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15671-15672->15671-15672/tcp, :::15671-15672->15671-15672/tcp   1264-services_rmq_1
8a792b0d0121   redis:4               "docker-entrypoint.s…"   18 minutes ago   Up 18 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                    1264-services_redis_1

如何解决此问题,以便从 java 客户端库连接到 rabbitmq,按预期工作?

您的 rabbitmq-management 并未在 VM 上的本地主机上侦听 5672,而是仅在容器中侦听。为了解决问题 运行 rabbitmq 容器与选项 -p 5671-5672:5671-5672