在任务队列中实现消息优先级[关闭]

问题描述 投票:0回答:1

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

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

python redis rabbitmq priority-queue pika
1个回答
1
投票

您可以使用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))

您可以将priority值设置为1到10之间,即您设置的最大优先级值。您可以将最大优先级值设置为255,但RabbitMQ建议最大值为10. Reference

要使用该消息,请定义回调函数并调用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')

优先级队列的使用者与普通队列的使用者相同。设置优先级时,将根据代理端的优先级重新排序消息。因此,您可以正常使用消息而不必担心消息。

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

© www.soinside.com 2019 - 2024. All rights reserved.