0

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

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

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

4

1 回答 1

1

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

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

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

于 2014-07-30T16:06:25.977 回答