RabbitMQ C#连接故障:指定的端点均不可访问

时间:2018-12-17 10:41:33

标签: c# rabbitmq

我有此代码:

public class Rabbit
    {
        public IConnection GetConnection()
        {
            ConnectionFactory connectionFactory = new ConnectionFactory();
            Uri uri = new Uri("amqp://login:password@1.2.3.4:5672/host");
            connectionFactory.Uri = uri;
            return connectionFactory.CreateConnection();
        }

        public  void Send(string queue, string data)
        {
            using (IConnection connection = GetConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue, false, false, false, null);
                    channel.BasicPublish(string.Empty, queue, null, Encoding.UTF8.GetBytes(data));

                }
            }
        }

        public  string  Receive(string queue)
        {
            using (IConnection connection = GetConnection())
            {
                using (IModel channelconsumer = connection.CreateModel())
                {
                    //channelconsumer.QueueDeclare(queue, false, false, false, null);
                    BasicGetResult result = channelconsumer.BasicGet(queue, true);
                    if (result != null)
                    {
                        string data = Encoding.UTF8.GetString(result.Body);
                        Console.WriteLine(data);
                        return data;
                    } else
                    {
                        return null;
                    }
                }
            }
        }
    }

我用它:

var rabbit = new Rabbit();
rabbit.Send("name.sample.example", json); 

运行此代码时出现错误:

RabbitMQ.Client.Exceptions.BrokerUnreachableException:“指定的端点都不可达”

在线:

return connectionFactory.CreateConnection();

我已经登录,密码是100%正确。 如何解决?

2 个答案:

答案 0 :(得分:0)

编写不带“主机”后缀的URI:

Uri uri = new Uri("amqp://login:password@1.2.3.4:5672/");

说明:amqp方案URI中的最后一个占位符保留用于指定虚拟主机-在RabbitMQ中,虚拟主机是资源的逻辑分组(例如交换和队列),旨在为不同客户端的资源分离提供支持使用相同的RabbitMQ实例。默认情况下,仅定义未命名的“ /”虚拟主机。与不存在的虚拟主机名的连接将失败。

答案 1 :(得分:0)

我也遇到了同样的问题,我所使用的凭据没有访问权限。

  

该用户无权访问任何虚拟主机。采用   下面的“设置权限”授予访问虚拟主机的权限

所以我在RabitMQ中添加了我的用户名,以提供对其的访问权限。 现在一切都很好。默认情况下,您在RabitMQ中具有访客/访客凭据