使用单个IBus的多个队列

本文关键字:队列 IBus 单个 | 更新日期: 2023-09-27 18:15:30

我正在尝试使用RabbitMQ和EasyNetQ使用多个队列(在我的情况下是四个队列)实现优先级消息。

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

考虑到这两个相互矛盾的因素,我应该如何构建它?每个队列一个IBus实例,如果发送更重要的队列上的消息,处理(稍后重新创建)不太重要的消息?

使用单个IBus的多个队列

优先级不是EasyNetQ/RabbitMQ的开箱即用的东西,所以这个问题没有简单的答案。通过使用消费者取消特性,您可以取消订阅而不处理IBus:

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

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