我希望用RabbitMQ实现一个优先级队列。邮件列表recommends使用多个队列,每个队列代表不同的优先级。
我的问题是,如何使用pika(或可能是其他一些python库)以某些优先顺序轮询多个队列?
答案 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.0
到available
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=...)