以下是我收到的例外.Net核心和rabbitMQ:AMQP操作被中断:AMQP关闭原因,由对等端启动,code=405,text ='RESOURCE_LOCKED -无法独占访问vhost '/'中的锁定队列'demo-queue'。它最初可能在另一个连接上声明,或者exclusive属性值与原始声明的属性值不匹配。',classId=50,methodId=10
制作人:
var factory = new ConnectionFactory
{
Uri = new Uri("amqp://guest:guest@localhost:5672")
};
using var connection= factory.CreateConnection();
using var channel= connection.CreateModel();
channel.QueueDeclare("demo-queue",durable:true,exclusive:true,autoDelete:false, arguments:null);
var message = new
{
Name = "Producer",
Message = "Hello!"
};
var body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message));
channel.BasicPublish("", "demo-queue",null,body);
消费者:
var factory = new ConnectionFactory
{
Uri = new Uri("amqp://guest:guest@localhost:5672")
};
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
channel.QueueDeclare("demo-queue", durable: true,
exclusive: true, autoDelete: false,
arguments: null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (sender, e) =>
{
var body = e.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(message);
};
channel.BasicConsume("demo-queue",true,consumer);
如果我更改在生产者或消费者中给出的队列名称,这是正确的做法还是正确的方式?哪种方式是正确的处理方式?
2条答案
按热度按时间6pp0gazn1#
在
QueueDeclare
部分中,您提到了与您创建的队列不同的属性。编辑:
你所有的错误都在这行代码中。因为你创建了一个队列。现在你想用错误的属性打开它。我认为
exclusive: false
会解决这个问题inkz8wg92#
Exchange和queu需要连接。如果不这样做,消息就无法知道它将到达的队列地址。在QueueDeclare之后,它必须与Exchange地址绑定。我已经这样实现了它。如果需要,可以查看我在此处创建的repo。https://github.com/oguzhanKomcu/RabbitMQ_Sample
我想这就是缺失的功能。