【问题标题】:Multiple queues using single IBus使用单个 IBus 的多个队列
【发布时间】:2014-07-31 00:06:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# easynetq


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢迈克。你是对的,这不是解决这个问题的正确方法。有一个更简单的解决方案。 RabbitMQ 通过这个插件提供优先队列:rabbitmq/rabbitmq-priority-queue : [github.com/rabbitmq/rabbitmq-priority-queue]
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2015-11-20
    • 2019-08-04
    • 2018-03-09
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多