【问题标题】:How to Implement Priority Queues in RabbitMQ/pika如何在 RabbitMQ/pika 中实现优先级队列
【发布时间】:2011-12-06 05:53:00
【问题描述】:

我希望用 RabbitMQ 实现一个优先级队列。邮件列表recommends 使用多个队列,每个队列代表不同的优先级。

我的问题是,您如何使用 pika(或其他 python 库)以某种优先顺序轮询多个队列?

【问题讨论】:

    标签: python rabbitmq priority-queue amqp pika


    【解决方案1】:

    接受的答案已过时。 来自rabbitmq 3.5.0native support 用于优先队列:

    RabbitMQ 有优先队列 从 3.5.0 版开始在核心中实现。任何队列都可以 使用客户端提供的可选参数变成优先级

    截至pika 1.1.0也是available

    类 pika.spec.BasicProperties(content_type=None, content_encoding=None,headers=None,delivery_mode=None, priority=None,correlation_id=None,reply_to=None,expiration=None, message_id=None,timestamp=None,type=None,user_id=None,app_id=None, cluster_id=无)

    使用此功能的代码可能如下所示:

    channel.basic_publish(properties=pika.BasicProperties(priority=your_priority),
                          exchange=...,
                          routing_key=...,
                          body=...)
    

    【讨论】:

      【解决方案2】:

      如果您在被接受后偶然发现这个问题。 RabbitMQ 有一个插件,允许设置一个具有优先级的队列: https://github.com/rabbitmq/rabbitmq-priority-queue

      【讨论】:

      【解决方案3】:

      我认为没有办法在消费者级别使用 pika 天真地做到这一点,因为默认情况下所有消费者都具有相同的优先级。

      为了解决这个问题,我可能会采取邮件列表中建议的两个队列,每个队列都有自己的消费者。在每个消费者的消费者回调中,我不会直接处理消息,而是将其放入优先级队列中,然后调用一个函数从队列中读取最高优先级的消息并进行处理。

      Another question 有类似的回应。

      【讨论】:

        猜你喜欢
        • 2015-01-06
        • 2021-01-07
        • 2016-09-17
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-26
        相关资源
        最近更新 更多