我有此代码:
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%正确。 如何解决?
答案 0 :(得分:0)
编写不带“主机”后缀的URI:
Uri uri = new Uri("amqp://login:password@1.2.3.4:5672/");
说明:amqp方案URI中的最后一个占位符保留用于指定虚拟主机-在RabbitMQ中,虚拟主机是资源的逻辑分组(例如交换和队列),旨在为不同客户端的资源分离提供支持使用相同的RabbitMQ实例。默认情况下,仅定义未命名的“ /”虚拟主机。与不存在的虚拟主机名的连接将失败。
答案 1 :(得分:0)
我也遇到了同样的问题,我所使用的凭据没有访问权限。
该用户无权访问任何虚拟主机。采用 下面的“设置权限”授予访问虚拟主机的权限
所以我在RabitMQ中添加了我的用户名,以提供对其的访问权限。 现在一切都很好。默认情况下,您在RabitMQ中具有访客/访客凭据