首页 > 解决方案 > 在任务队列中实现消息优先级

问题描述

如何使用 Python 客户端(Pika/Kombu)或任何其他任务队列使用 RabbitMQ 实现优先级队列?

PS -> 在消息优先级中实现任务队列。

标签: pythonredisrabbitmqpriority-queuepika

解决方案


您可以使用声明优先级队列pika

channel.queue_declare('queue_name', {''x-max-priority': 10})

优先发送消息

channel.basic_publish(exchange='exchange_name',
                      routing_key='routing_key',
                      body='Messsage',
                      properties=BasicProperties(priority=1))

您可以设置priority1 到 10 之间的值,即您设置的最大优先级值。您可以设置最大优先级值为 255,但 RabbitMQ 建议最大值为 10。参考

要使用消息,您定义一个回调函数并调用该basic_consume方法

def callback(ch, method, properties, body):

    # Getting the message
    message = body.decode()

    ## Do the logic
    print('Received message {}'.format(message))

    # Sending acknowledgment back
    ch.basic_ack(delivery_tag=method.delivery_tag)

channel.basic_consume(callback, queue='queue_name')

优先队列的消费者与普通队列的消费者相同。当您设置优先级时,消息会根据代理端的优先级重新排序。因此,您可以正常使用这些消息,而不会为这些消息而烦恼。

注意:您不能将队列重新声明为优先级队列。您必须删除旧队列并将新队列声明为优先队列。


推荐阅读