7

我正在寻找使用 RabbitMQ 实现优先级队列。邮件列表建议使用多个队列,每个队列代表不同的优先级。

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

4

3 回答 3

10

接受的答案已过时。从rabbitmq 3.5.0那里对优先级队列的原生支持:

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

它也可以pika 1.1.0

类 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=None)

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

channel.basic_publish(properties=pika.BasicProperties(priority=your_priority),
                      exchange=...,
                      routing_key=...,
                      body=...)
于 2019-07-24T18:42:23.893 回答
4

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

于 2014-07-30T05:40:12.187 回答
3

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

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

另一个有类似回答的问题。

于 2011-10-25T18:30:00.643 回答