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

时间:2016-08-03 14:46:43

标签: c# rabbitmq

在RabbitMQ .NET客户端中,不推荐使用QueueingBasicConsumer

他们建议改用EventingBasicConsumer。我以同样的方式实现了IQueueingBasicConsumer接口,效果很好。

但是,我很好奇它为何被弃用以及为什么我应该使用EventingBasicConsumer

2 个答案:

答案 0 :(得分:4)

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

但如果你不想去不同的链接并阅读那里,我会总结......

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

答案 1 :(得分:3)

我认为(我可能错了!)因为性能原因而完成了。 QueueingBasicConsumer uses SharedQueue<T>基本上是带有锁的.NET Queue。为了处理传递,您需要锁定队列,将项目排入队列并通知等待队列的其他线程(Monitor.Pulse)。

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

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