【问题标题】:RabbitMQ: Select queue by priorityRabbitMQ:按优先级选择队列
【发布时间】:2025-12-27 22:10:11
【问题描述】:

我在 php 中使用 RabbitMQ,并且在两个队列中有一个消费者,Q1Q2。 由于Q1 中的按摩更重要,我希望首先处理它们。

只有在Q1没有按摩的情况下,如何让消费者从Q2消费

我用:

$channel->basic_consume('Q1', '', false, true, false, false, $callback);
$channel->basic_consume('Q2', '', false, true, false, false, $callback);

将消费者附加到队列中。结果是消费者在 Q1 和 Q2 之间交替。

【问题讨论】:

    标签: php rabbitmq


    【解决方案1】:

    我不认为 RabbitMQ 会按照你描述的方式做你想做的事。你需要在你的 PHP 中编写代码来为自己管理“优先级”,这样做。

    但是,我可以想出两个选项来让它与 RabbitMQ 一起工作,并为你减少代码......这两者都需要你做一些不同的事情。

    选项 1:为 Q1 和 Q2 创建单独的消费者。

    那么,哪个更重要并不重要,因为它们都会被立即处理。

    这里的优势在于,您可以轻松地在第一季度扩展您的消费者。只需添加更多消费者实例,您将更快地处理 Q1 消息。

    选项 2:使用 RabbitMQ 中的优先级队列支持

    https://www.rabbitmq.com/priority.html

    这需要您将所有消息发送到同一个 Q,并为其设置优先级。

    我的个人选择:选项 #1

    我对优先队列支持没有太多经验,因为我看不出使用优先队列与使用单独的队列和消费者相比有很多优势。我喜欢扩展消费者的能力,以及让 Q1 和 Q2 为不同目的使用不同的消息格式。

    希望有帮助!

    【讨论】: