Соединение RabbitMQ работает на локальном хосте, но не через сеть - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь заставить работать сервер RabbitMQ. Подключение к локальному хосту не было проблемой с руководством. Но всякий раз, когда я пытаюсь сделать то же самое через сеть, я не могу заставить приложение подключиться к брокеру.

Send:

var factory = new ConnectionFactory() { };
factory.HostName = "192.168.1.52";
factory.Port = 5672;
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
       {
           channel.QueueDeclare(queue: "hello",
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            string message = "Hello World!";
            var body = Encoding.UTF8.GetBytes(message);

            channel.BasicPublish(exchange: "",
                                 routingKey: "hello",
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }

Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();

Экземпляр RabbitMQ работает на другом P C с IP-адресом 192.168.1.52. Порт по умолчанию, используемый RabbitMQ, - 5672, и я еще не изменил имя пользователя или пароль, поэтому они все еще остаются гостями и гостями.

Recieve:

var factory = new ConnectionFactory() { };
factory.HostName = "192.168.1.52";
factory.Port = 5672;
factory.UserName = "guest";
factory.Password = "guest";
factory.VirtualHost = "/";
using (var connection = factory.CreateConnection())
    using (var channel = connection.CreateModel())
    {
        channel.QueueDeclare(queue: "hello",
                             durable: false,
                             exclusive: false,
                             autoDelete: false,
                             arguments: null);

        var consumer = new EventingBasicConsumer(channel);
        consumer.Received += (model, ea) =>
        {
            var body = ea.Body;
            var message = Encoding.UTF8.GetString(body);
            Console.WriteLine(" [x] Received {0}", message);
        };
        channel.BasicConsume(queue: "hello",
                             autoAck: true,
                             consumer: consumer);

        Console.WriteLine(" Press [enter] to exit.");
        Console.ReadLine();
    }

Обе программы выдают исключение :

Возникло исключение: 'RabbitMQ.Client.Exceptions.ConnectFailureException' в RabbitMQ.Client.dll при запуске программы

, но это не не нарушать нить. Через некоторое время угроза завершается со следующей ошибкой:

ExtendedSocketException: попытка подключения не удалась, потому что подключенная сторона не ответила правильно после определенного времени, или не удалось установить соединение, так как подключенное соединение хозяин не ответил. 192.168.1.52:5672

Ответы [ 2 ]

1 голос
/ 04 марта 2020

вам нужно создать новую учетную запись пользователя, гостевая учетная запись по умолчанию ограничена только localhost.

1 голос
/ 04 марта 2020

Возможно, проблема в брандмауэре. [RabbitMQ имеет некоторую документацию о том, как правильно настроить брандмауэр, чтобы вам не приходилось полностью его выключать] (https://www.rabbitmq.com/networking.html#ports).

Вот обзор в случае ссылка-гниль:

Port Access

RabbitMQ nodes bind to ports (open server TCP sockets) in order to accept client and CLI tool connections. Other processes and tools such as SELinux may prevent RabbitMQ from binding to a port. When that happens, the node will fail to start.

CLI tools, client libraries and RabbitMQ nodes also open connections (client TCP sockets). Firewalls can prevent nodes and CLI tools from communicating with each other. Make sure the following ports are accessible:

    4369: epmd, a peer discovery service used by RabbitMQ nodes and CLI tools
    5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS
    25672: used for inter-node and CLI tools communication (Erlang distribution server port) and is allocated from a dynamic range (limited to a single port by default, computed as AMQP port + 20000). Unless external connections on these ports are really necessary (e.g. the cluster uses federation or CLI tools are used on machines outside the subnet), these ports should not be publicly exposed. See networking guide for details.
    35672-35682: used by CLI tools (Erlang distribution client ports) for communication with nodes and is allocated from a dynamic range (computed as server distribution port + 10000 through server distribution port + 10010). See networking guide for details.
    15672: HTTP API clients, management UI and rabbitmqadmin (only if the management plugin is enabled)
    61613, 61614: STOMP clients without and with TLS (only if the STOMP plugin is enabled)
    1883, 8883: (MQTT clients without and with TLS, if the MQTT plugin is enabled
    15674: STOMP-over-WebSockets clients (only if the Web STOMP plugin is enabled)
    15675: MQTT-over-WebSockets clients (only if the Web MQTT plugin is enabled)
    15692: Prometheus metrics (only if the Prometheus plugin is enabled)

It is possible to configure RabbitMQ to use different ports and specific network interfaces.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...