【问题标题】:Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException:'指定的端点都不可到达'
【发布时间】:2020-07-20 09:29:06
【问题描述】:

我已经使用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 访问管理控制台,我可以使用默认用户名和密码(访客/访客)登录

下面是我的 .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

    更新 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】:

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

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

    ...

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

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

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

    【讨论】:

    • 谢谢@ThisIsNoZaku,我已经用你的回答更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2015-12-02
    • 1970-01-01
    • 2021-04-09
    • 2018-05-31
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多