【发布时间】:2011-12-06 05:53:00
【问题描述】:
我希望用 RabbitMQ 实现一个优先级队列。邮件列表recommends 使用多个队列,每个队列代表不同的优先级。
我的问题是,您如何使用 pika(或其他 python 库)以某种优先顺序轮询多个队列?
【问题讨论】:
标签: python rabbitmq priority-queue amqp pika
我希望用 RabbitMQ 实现一个优先级队列。邮件列表recommends 使用多个队列,每个队列代表不同的优先级。
我的问题是,您如何使用 pika(或其他 python 库)以某种优先顺序轮询多个队列?
【问题讨论】:
标签: python rabbitmq priority-queue amqp pika
接受的答案已过时。
来自rabbitmq 3.5.0 的native 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=...)
【讨论】:
如果您在被接受后偶然发现这个问题。 RabbitMQ 有一个插件,允许设置一个具有优先级的队列: https://github.com/rabbitmq/rabbitmq-priority-queue
【讨论】:
我认为没有办法在消费者级别使用 pika 天真地做到这一点,因为默认情况下所有消费者都具有相同的优先级。
为了解决这个问题,我可能会采取邮件列表中建议的两个队列,每个队列都有自己的消费者。在每个消费者的消费者回调中,我不会直接处理消息,而是将其放入优先级队列中,然后调用一个函数从队列中读取最高优先级的消息并进行处理。
Another question 有类似的回应。
【讨论】: