无法连接到rabbit mq

问题描述 投票:0回答:1

我正在编写一个用于连接到 RabbitMQ 的控制台应用程序,并将其作为 Docker 容器上的映像运行。

当我浏览到 http://localhost:15672/#/ 时,我的图像在端口 15672 上运行。我可以使用默认用户密码登录 RabbitMQ

我的控制台应用程序:

using System;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        // Connection info
        string hostName = "localhost";
        string userName = "guest";
        string password = "guest";
        string queueName = "hello";

        // Create connection factory
        var factory = new ConnectionFactory()
        {
            HostName = hostName,
            UserName = userName,
            Password = password,
            Port= 15672
        };

        // Connect to RabbitMQ server
        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            // Declare a queue
            channel.QueueDeclare(queue: queueName,
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            // Create a consumer
            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (model, ea) =>
            {
                var body = ea.Body.ToArray();
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);
            };

            // Consume messages from the queue
            channel.BasicConsume(queue: queueName,
                                 autoAck: true,
                                 consumer: consumer);

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

运行控制台应用程序时出现的错误:

RabbitMQ.Client.Exceptions.BrokerUnreachableException: 'None of the specified endpoints were reachable'

错误发生在这一行:

        using (var connection = factory.CreateConnection())

如何修复此错误?我的代码有错误吗?

我尝试了很多方法,比如在另一台电脑上运行docker,我检查了防火墙、防病毒和其他相关设置。我还有一个可以正常工作的 mysql 映像,我可以将它插入到我的数据库中!

.net .net-core rabbitmq message-queue
1个回答
0
投票

如果您使用 RabbitMQ 的管理接口端口 15672,这是 RabbitMQ 管理插件的 HTTP API 和仪表板的默认端口,建议不要将此端口直接暴露给外界。此端口通常用于管理目的,而不用于客户端应用程序连接。

要将控制台应用程序从 Docker 容器内连接到 RabbitMQ,您应该使用标准 AMQP 端口(默认为 5672)或安全 AMQP 端口(启用 TLS/SSL 时默认为 5671)。这些端口用于 RabbitMQ 客户端和 RabbitMQ 服务器之间的通信。

以下是修改方法

以下是修改 Docker 设置以公开正确端口的方法:

# Use the official RabbitMQ image

来自rabbitmq:3-管理

暴露标准AMQP端口

曝光5672

通过此 Dockerfile,您将使用包含管理插件的官方 RabbitMQ 映像。它公开用于客户端连接的标准 AMQP 端口 (5672)。

在连接到 RabbitMQ 的控制台应用程序或任何其他客户端应用程序中,请确保使用适当的 AMQP 端口(SSL 为 5672 或 5671)与 RabbitMQ 服务器进行通信。

通过采用这种方法,您可以在端口 15672 上保持管理接口在内部(在 Docker 网络内)可访问,而客户端则使用标准 AMQP 端口连接到 RabbitMQ 服务器。

© www.soinside.com 2019 - 2024. All rights reserved.