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