【问题标题】:Implement message prioritization in task queue [closed]在任务队列中实现消息优先级[关闭]
【发布时间】:2019-08-12 22:56:39
【问题描述】:

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

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

【问题讨论】:

    标签: python redis rabbitmq priority-queue pika


    【解决方案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')
    

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

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

    【讨论】:

    • 你能告诉我如何根据优先级消费数据吗?
    • 添加了关于消费者的内容。
    • 我收到的数据不是基于优先级的 FIFO。
    • 您能否将您的代码示例添加到您要优先发布消息的位置?
    • 用于发送 (pastebin.com/raw/mv6s5gwr) 和用于接收 (pastebin.com/raw/EDVX3N4n)
    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2015-01-06
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多