Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints we



我已经使用这个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我可以使用默认用户名和密码(访客/访客(登录

下面是我的.Net核心代码

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创建的网络有关。

使用docker链接时拒绝连接到RabbitMQ

的其他详细信息

  • .Net Core 3.1应用程序
  • RabbitMQ.客户端->5.1.2

    更新1

根据@ThisIsNoZaku的回答,暴露额外的端口解决了我的问题。

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

使用AMQP客户端连接到RabbitMQ实例和连接到管理控制台UI(容器中的15762,已映射到主机上的5762(的端口不同。当应用程序试图将AMQP客户端指向管理端口时,它失败了,因为它不受支持:

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

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

您的RabbitMQ实例应该公开并连接到AMQP:的正确端口

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

相关内容

最新更新