RabbitMQ:按优先级选择队列

时间:2017-01-06 00:23:06

标签: php rabbitmq

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

如果Q2 中没有按摩,如何让消费者从Q1消费?

我用:

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

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

1 个答案:

答案 0 :(得分:1)

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

但是,我可以想到两个选项可以让它与RabbitMQ配合使用,而且代码更少......这两个选项都要求你做一些不同的事情。

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

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

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

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

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

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

我的个人选择:选项#1

我对优先级队列支持没有太多经验,因为我没有看到使用它与使用单独的队列和使用者相比有很多好处。我喜欢扩展消费者的能力,并且让Q1和Q2使用不同的消息格式用于不同的目的。

希望有所帮助!