python - 在任务队列中实现消息优先级
问题描述
如何使用 Python 客户端(Pika/Kombu)或任何其他任务队列使用 RabbitMQ 实现优先级队列?
PS -> 在消息优先级中实现任务队列。
解决方案
您可以使用声明优先级队列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。参考
要使用消息,您定义一个回调函数并调用该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')
优先队列的消费者与普通队列的消费者相同。当您设置优先级时,消息会根据代理端的优先级重新排序。因此,您可以正常使用这些消息,而不会为这些消息而烦恼。
注意:您不能将队列重新声明为优先级队列。您必须删除旧队列并将新队列声明为优先队列。
推荐阅读
- json - 如何在 Angular 的服务中返回一个 json 键内的数组?
- c++ - 如何创建将某个实体移动到某个位置的方向向量
- vue.js - 使用 vuelidate 时设置默认 v-model
- css - 复制和粘贴多行 CSS (Chrome DevTools)
- mysql - 雄辩模型laravel的条件
- java - MAX_VALUE+1 & MIN_VALUE-1 如何与java的所有数据类型一起工作?
- c# - .NET Core 应用程序中的 appsettings.json 与 appsettings.{Environment}.json
- html - 从网站中提取并将文本作为数组存储在 JS 中
- javascript - 如何使用反应钩子发布图像
- python - 在 Python 中搜索列表中的重复项