Docker - RabbitMQ.Client.Exceptions.BrokerUnreachableException: «Ни одна из указанных конечных точек не была доступна» - PullRequest
1 голос
/ 08 апреля 2020

Я настроил сервер RabbitMQ на своем компьютере разработчика, используя это docker изображение.

Я использовал приведенную ниже команду для настройки моего контейнера

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'

Stack Trace

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.

Отказано в подключении к RabbitMQ при использовании docker link

Other детали

  • . 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

1 Ответ

1 голос
/ 08 апреля 2020

Порты для подключения к экземпляру RabbitMQ с помощью клиента AMQP и для подключения к пользовательскому интерфейсу консоли управления (15762 в контейнере, который вы сопоставили 5762 на хосте) различны. Когда приложение пытается указать клиента AMQP на порт управления, происходит сбой , поскольку оно не поддерживается :

Доступ к пользовательскому интерфейсу управления можно получить с помощью веб-браузера

...

Обратите внимание, что порт UI и HTTP API - обычно 15672 - не поддерживает соединения AMQP 0-9-1, AMQP 1.0, STOMP или MQTT. Эти клиенты должны использовать отдельные порты.

Ваш экземпляр RabbitMQ должен предоставить доступ, а ваш клиент подключиться к правильным портам для AMQP :

5672, 5671: используется клиентами AMQP 0-9-1 и 1.0 без и с TLS

...