如何在RabbitMQ / pika中实现优先级队列

时间:2011-10-12 15:21:49

标签: python rabbitmq priority-queue amqp pika

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

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

3 个答案:

答案 0 :(得分:3)

我认为没有办法在消费者层面上通过鼠兔天真地做到这一点,因为默认情况下所有消费者具有相同的优先权。

我可以做的解决问题的方法是在邮件列表中建议两个队列,每个队列都有自己的消费者。在每个消费者的消费者回调中,而不是直接处理消息,我会把它放入优先级队列,然后调用一个从队列中读取最高优先级消息并处理它的函数。

Another question也有类似的回应。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

接受的答案已过时。 rabbitmq 3.5.0中有native support个优先级队列:

  

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

pika 1.1.0available

  

class pika.spec.BasicProperties(content_type = None,   content_encoding =无,标头=无,delivery_mode =无,   优先级=无,correlation_id =无,reply_to =无,到期时间=无,   message_id =没有,时间戳=没有,类型=没有,user_id =没有,app_id =没有,   cluster_id = None)

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

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