在任务队列中实现消息优先级排序
Implement message prioritization in task queue
如何使用 Python 客户端(Pika/Kombu)或任何其他任务队列使用 RabbitMQ 实现优先级队列?
P.S。 -> 在消息优先级中实现任务队列。
您可以使用 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))
您可以在 1 到 10 之间设置 priority
值,即您设置的最大优先级值。您可以将最大优先级值设置为 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')
优先队列的消费者与普通队列的消费者相同。当您设置优先级时,消息会根据代理端的优先级重新排序。这样您就可以正常使用这些消息而不会为这些消息烦恼。
注意:您不能将队列重新声明为优先级队列。您必须删除旧队列并将新队列声明为优先队列。
如何使用 Python 客户端(Pika/Kombu)或任何其他任务队列使用 RabbitMQ 实现优先级队列?
P.S。 -> 在消息优先级中实现任务队列。
您可以使用 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))
您可以在 1 到 10 之间设置 priority
值,即您设置的最大优先级值。您可以将最大优先级值设置为 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')
优先队列的消费者与普通队列的消费者相同。当您设置优先级时,消息会根据代理端的优先级重新排序。这样您就可以正常使用这些消息而不会为这些消息烦恼。
注意:您不能将队列重新声明为优先级队列。您必须删除旧队列并将新队列声明为优先队列。