RabbitMQ实现的优先级队列没有按预期工作



我面临以下问题,这可能是由于我对RabbitMQ的理解不佳。很抱歉我没有使用RabbitMQ专家的术语。

简而言之,我希望向队列发布具有不同优先级的消息,并且我希望消费者优先处理优先级较高的消息。

我已经声明我的队列为:

connection = pika.BlockingConnection(parameters) 
channel = connection.channel() 
channel.basic_qos(prefetch_count=1)
channel.queue_declare(queue=JOBS_PENDING, durable=True, arguments={"x-max-priority": 1})

我使用以下命令在该队列中发布消息,假设有10条消息,前9条的优先级为1,第10条的优先级更高,假设为2。

pika_props = pika.BasicProperties(delivery_mode=2, priority=1 or 2)
channel.basic_publish(exchange='', routing_key=JOBS_PENDING, body=message, properties=pika_props)

我有一个单独的服务,它从上面的队列中消费消息。

channel.basic_consume(queue=JOBS_PENDING, on_message_callback=_encapsulate_callback(callback), arguments={"x-max-priority": 1})

根据我的理解,这样做,消耗的第一条消息应该是第10条消息,因为它的优先级高于最大值(1)。相反,我看到的是消息是按照它们发布的顺序被使用的,即,前9个优先级为1,第10个优先级为最后。

我认为你的问题是当你声明队列时,你已经定义了消息的最大优先级为1。在这种情况下,您的所有消息都将得到相同的处理,因为您的优先级为2的消息超过了您在队列中定义的优先级最大值。

设置最大优先级为大于1的任意数字,例如10。

查看文档了解更多详细信息

相关内容