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

acr*_*bia 5 python priority-queue amqp rabbitmq pika

我期待用RabbitMQ实现优先级队列.邮件列表建议使用多个队列,每个队列代表不同的优先级.

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

ffe*_*ast 9

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

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

它也可以pika 1.1.0

class 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=...)
Run Code Online (Sandbox Code Playgroud)


ala*_*nxz 4

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

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

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