使用单个IBus的多个队列

时间:2014-07-29 14:19:33

标签: c# easynetq

我尝试使用RabbitMQ和EasyNetQ使用多个队列(在我的例子中为四个)来实现优先级消息。

我知道IBus实例应该在整个应用程序生命周期中保持活动状态。 此外,阻止RabbitMQ在给定队列上发送更多消息的唯一方法是使用IBus处置Dispose

鉴于这两个相互矛盾的因素,我应该如何构建这个? 每个队列有一个IBus实例,是否正在发送更重要队列上的消息,处理(以后重新创建)不太重要的队列?

1 个答案:

答案 0 :(得分:1)

优先顺序并不是EasyNetQ / RabbitMQ开箱即用的东西,因此这个问题没有简单的答案。您可以使用消费者取消功能取消订阅而不会丢弃IBus:

var consumer = bus.Subscribe<MyMessage>( ....
...
// stop consuming:
consumer.Dispose();

但我真的不认为这是设计优先级系统的答案。您最好使用原始RabbitMQ.Client并设计自己的IBasicConsumer实现,该实现消耗所有四个队列并将优先级算法编码到其中。我很害怕相当先进的东西。