gpt4 book ai didi

c# - RabbitMQ 抛出共享队列关闭错误

转载 作者:行者123 更新时间:2023-11-30 17:41:21 28 4
gpt4 key购买 nike

我们在项目中一直使用RabbitMQ作为消息服务。我们将把消息推送到队列中,消息消费者将接收到消息,并尝试进入数据库。一旦将值输入数据库,我们将向 RabbitMQ 服务器发回肯定确认,否则我们将发送否定确认。

我已将消息使用者创建为 Windows 服务。消息已成功输入并被消息使用者很好地接收(在表中输入)但异常日志为“共享队列已关闭”。

请找到代码块。

 while (true)
{

try
{

if (!Connection.IsOpen || !Channel.IsOpen)
{
CreateConnection(existConnectionConfig, QueueName);
consumer = new QueueingBasicConsumer(Channel);
consumerTag=Channel.BasicConsume(QueueName,false,consumer);
}

BasicDeliverEventArgs e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
IBasicProperties props = e.BasicProperties;
byte[] body = e.Body;
bool ack = onMessageReceived(body);

if (ack == true)
{
Channel.BasicAck(e.DeliveryTag, false);
}
else
Channel.BasicNack(e.DeliveryTag, false, true);

}
catch (Exception ex)
{

//Logged the exception in text file where i could see the
//message as "Shared queue closed"
}
}

我也上网过,但无法解决问题。如果有人能够帮助我,那将会很有帮助。

提前致谢,热带雨林

最佳答案

在回答您的问题时,当我的 Web 客户端由于应用程序池回收或某些其他超出您范围的连接已断开的潜在原因重置连接时,我遇到了同样的问题。您可能需要构建重试机制来应对这种情况。

您可能想看看 MassTransit .我已经将它与 RabbitMQ 一起使用,它通过有效地为 RabbitMQ 提供管理层使事情变得容易得多。 MassTransit 消除了令人头疼的重试机制 - 请参阅 Connection management .它还提供了一个很好的多线程并发消费者配置。

这样做的好处是您的实现更具可移植性 - 如果需求出现,您可以轻松地将内容更改为 MSMQ。

关于c# - RabbitMQ 抛出共享队列关闭错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com