QueueingBasicConsumer 已弃用。哪个消费者更适合实现RabbitMq .net客户端

ome*_*ruk 8 c# rabbitmq

在 RabbitMQ .NET 客户端中,QueueingBasicConsumer已弃用。

他们建议EventingBasicConsumer改用。我IQueueingBasicConsumer以与他们相同的方式实现了接口,并且运行良好。

但是,我很好奇为什么不推荐使用它以及为什么我应该使用EventingBasicConsumer?

Sve*_*lov 6

阅读此讨论。Michael Klishin 是 GitHub 上 .NET RabbitMQ 客户端的维护者。

但是,如果您不想转到不同的链接并在那里阅读,我将总结...

QueingBasicConsumer 在当前版本中不会自动恢复,它是解决不再存在的消息调度程序问题的方法。但我也认为 Alexey 是对的,性能也可能是队列引入的锁定和忙等待(在大多数实现中)的问题。


Ale*_*hev 5

我认为(我可能错了!)这是出于性能原因。QueueingBasicConsumer 使用 SharedQueue<T>基本上是Queue带锁的.NET 。为了处理交付,您需要锁定队列,将项目入队并通知等待队列的其他线程(Monitor.Pulse)。

EventingBasicConsumer 不使用任何排队机制。它只是触发您需要在代码中处理的 Received (HandleBasicDeliver) 事件。

正如您所看到的,现在EventingBasicConsumer性能开销更少,因此速度更快(应该如此)。