Docker-RabbitMQ.Client.Exceptions.BrokerUnreachableException:'指定的端点均不可访问'

问题描述 投票:0回答:1

我已经使用this docker映像在我的开发机上设置RabbitMQ服务器。

我已使用以下命令设置我的容器

docker run -d --name my-rabbit -p 5672:15672 rabbitmq:3-management

下面是docker ps命令输出

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a40704b7f3a4 rabbitmq:3-management "docker-entrypoint.s…" 13 minutes ago Up 12 minutes 4369/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5672->15672/tcp my-rabbit

可从http://localhost:5672访问管理控制台,我可以使用默认的用户名和密码(guest / guest)登录

下面是我的.Net Core代码

public RabbitMQMnager()
        {
            var factory = new ConnectionFactory();
            factory.Port = 5672;
            Uri uri = new Uri("amqp://guest:guest@localhost:5672/");

            var connection = factory.CreateConnection();

            //Below are values of different connection string parameters
            factory.HostName = "localhost";
            factory.UserName = "guest";
            factory.Password = "guest";
            factory.VirtualHost = "/";
            factory.Port = 5672;

            var channel = connection.CreateModel(); //<- Exception here
        }

执行上述代码后,我得到了下面的异常。

RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'

堆栈跟踪

This exception was originally thrown at this call stack: RabbitMQ.Client.Framing.Impl.Connection.StartAndTune() RabbitMQ.Client.Framing.Impl.Connection.Open(bool) RabbitMQ.Client.Framing.Impl.Connection.Connection(RabbitMQ.Client.IConnectionFactory, bool, RabbitMQ.Client.Impl.IFrameHandler, string) RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(RabbitMQ.Client.Impl.IFrameHandler) RabbitMQ.Client.Framing.Impl.AutorecoveringConnection.Init(RabbitMQ.Client.IEndpointResolver) RabbitMQ.Client.ConnectionFactory.CreateConnection(RabbitMQ.Client.IEndpointResolver, string)

我发现了类似的问题,但提到的解决方案对我来说还不够。似乎与docker和docker创建的网络有关。

Refused connection to RabbitMQ when using docker link

其他详细信息

  • 。Net Core 3.1应用程序
  • RabbitMQ.Client-> 5.1.2

    UPDATE 1

根据公开额外端口的@ThisIsNoZaku答案,解决了我的问题。

docker run -d --hostname my-rabbit --name my-rabbit -p 15672:15672 -p  5672:5672 rabbitmq:3-management
docker .net-core rabbitmq rabbitmq-exchange
1个回答
1
投票

[使用AMQP客户端连接到RabbitMQ实例以及连接到管理控制台UI(容器中的15762,您已将其映射到主机上的5762)的端口是不同的。当应用程序尝试将AMQP客户端指向管理端口时,它将失败because it's not supported

可以使用网络浏览器访问管理UI

...

请注意,UI和HTTP API端口(通常为15672)不支持AMQP 0-9-1,AMQP 1.0,STOMP或MQTT连接。这些客户端应使用单独的端口。

您的RabbitMQ实例应该公开,并且您的客户端连接到correct ports for AMQP

5672、5671:由不带TLS和带TLS的AMQP 0-9-1和1.0客户端使用

© www.soinside.com 2019 - 2024. All rights reserved.