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