我尝试使用RabbitMQ和EasyNetQ使用多个队列(在我的例子中为四个)来实现优先级消息。
我知道IBus
实例应该在整个应用程序生命周期中保持活动状态。
此外,阻止RabbitMQ在给定队列上发送更多消息的唯一方法是使用IBus
处置Dispose
。
鉴于这两个相互矛盾的因素,我应该如何构建这个?
每个队列有一个IBus
实例,是否正在发送更重要队列上的消息,处理(以后重新创建)不太重要的队列?
答案 0 :(得分:1)
优先顺序并不是EasyNetQ / RabbitMQ开箱即用的东西,因此这个问题没有简单的答案。您可以使用消费者取消功能取消订阅而不会丢弃IBus:
var consumer = bus.Subscribe<MyMessage>( ....
...
// stop consuming:
consumer.Dispose();
但我真的不认为这是设计优先级系统的答案。您最好使用原始RabbitMQ.Client并设计自己的IBasicConsumer实现,该实现消耗所有四个队列并将优先级算法编码到其中。我很害怕相当先进的东西。