首页 > 解决方案 > RabbitMQ 2 队列

问题描述

看到类似的问题,但预期的答案不同。我的问题是我可以创建一个消费者专注于一个队列,直到它清空然后切换到另一个队列,直到新的工作被发送到他们的主队列?

例如:1 个队列包含要在较长时间内处理的大量工作及其自己的专用消费者(例如 3 个)。第二个队列接收的工作更少,需要更少的处理。如果第二个队列的消费者完成了他们的工作,我可以让他们切换到第一个队列,直到他们的队列收到更多工作吗?

标签: rabbitmqmessage-queuepriority-queue

解决方案


我认为对于这个问题,重要的是要记住规范意义上的“消费者”与 RabbitMQ 意义上的“消费者”之间存在差异。

RabbitMQ 消费者是协议的一个发明 - 基本上,它是通道/连接希望在指定的消费者标签下将消息推送到它的指定。从这个意义上说,它只是通知代理立即发送消息。

在规范意义上,消息消费者是处理消息的任何代码段。

所以,你的问题的答案是“是的,继续写你的程序来做到这一点。” 您可以控制规范的消费者代码。由您的软件决定如何处理来自队列的消息。

现在,如果您想知道 RabbitMQ 是否可以将消费者重新订阅到不同的队列,答案是“它不是这样工作的”。在 RabbitMQ 中,消费者只是对订阅队列请求的响应——它是一个“消费者标签”对象。订阅的持续性质与通道/连接对相关。

你该怎么办?虽然您的代码没有指定任何特定的编码语言,但在我看来,您甚至问这个问题都偏离了轨道。订阅两个队列。如果工人无事可做,我认为计算机会对此非常满意。如果您担心一个特别繁忙的队列会发出过多的工作,您可以使用多种技术来限制进入该消费者的消息。一种流行的技术是预取


推荐阅读