Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException:“指定的端点均无法访问”

use*_*747 6 rabbitmq docker rabbitmq-exchange .net-core

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

\n\n

我使用下面的命令来设置我的容器

\n\n

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

\n\n

以下是 docker ps 命令输出

\n\n

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

\n\n

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

\n\n

下面是我的.Net Core 代码

\n\n
public RabbitMQMnager()\n        {\n            var factory = new ConnectionFactory();\n            factory.Port = 5672;\n            Uri uri = new Uri("amqp://guest:guest@localhost:5672/");\n\n            var connection = factory.CreateConnection();\n\n            //Below are values of different connection string parameters\n            factory.HostName = "localhost";\n            factory.UserName = "guest";\n            factory.Password = "guest";\n            factory.VirtualHost = "/";\n            factory.Port = 5672;\n\n            var channel = connection.CreateModel(); //<- Exception here\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行上面的代码后,我遇到以下异常。

\n\n
RabbitMQ.Client.Exceptions.BrokerUnreachableException: \'None of the specified endpoints were reachable\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

堆栈跟踪

\n\n

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

\n\n

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

\n\n

使用 docker link 时拒绝连接到 RabbitMQ

\n\n

其他详情

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

    \n\n

    更新1

  • \n
\n\n

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

\n\n
docker run -d --hostname my-rabbit --name my-rabbit -p 15672:15672 -p  5672:5672 rabbitmq:3-management\n
Run Code Online (Sandbox Code Playgroud)\n

Thi*_*aku 8

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

\n\n
\n

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

\n\n

...

\n\n

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

\n
\n\n

您的 RabbitMQ 实例应该公开,并且您的客户端应连接到AMQP 的正确端口

\n\n
\n

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

\n
\n