RabbitMQ 2 队列
RabbitMQ 2 Queues
看到了类似的问题,但预期的答案不同。我的问题是我可以创建一个消费者专注于单个队列直到它清空然后切换到另一个队列直到新工作被发送到他们的主队列吗?
例如:1 个队列包含大量要在较长时间范围内处理的工作和它自己的专用消费者(例如 3 个)。第二个队列收到更少的工作,需要更少的处理。如果第二个队列的消费者完成了他们的工作,我可以让他们切换到第一个队列,直到他们的队列收到更多工作吗?
我认为对于这个问题,重要的是要记住规范意义上的 "consumer" 与 RabbitMQ 意义上的 "consumer" 之间存在差异。
A RabbitMQ Consumer 是协议的发明 - 基本上,它是 channel/connection 想要将消息推送给它的指定,在指定的消费者标签。从这个意义上讲,它只是通知代理立即发送消息。
在规范意义上,消息使用者是处理消息的任何代码。
因此,您的问题的答案是 "yes, go ahead and write your program to do that." 您可以控制规范的消费者代码。由您的软件决定如何处理来自队列的消息。
现在,如果您想知道 RabbitMQ 是否可以将消费者重新订阅到不同的队列,答案是 "that's not how it works." 在 RabbitMQ 中,消费者只是对订阅队列请求的响应- 它是一个 "consumer tag" 对象。订阅的持续性与 channel/connection 对有关。
你应该怎么做? 虽然你的代码没有指定任何特定的编码语言,但在我看来,你问这个问题就偏离了轨道。订阅两个队列。如果工人无事可做,我认为计算机会对此非常满意。如果您担心特别繁忙的队列发出过多的工作,您可以使用多种技术来限制进入该消费者的消息。一种流行的技术是 prefetch.
看到了类似的问题,但预期的答案不同。我的问题是我可以创建一个消费者专注于单个队列直到它清空然后切换到另一个队列直到新工作被发送到他们的主队列吗?
例如:1 个队列包含大量要在较长时间范围内处理的工作和它自己的专用消费者(例如 3 个)。第二个队列收到更少的工作,需要更少的处理。如果第二个队列的消费者完成了他们的工作,我可以让他们切换到第一个队列,直到他们的队列收到更多工作吗?
我认为对于这个问题,重要的是要记住规范意义上的 "consumer" 与 RabbitMQ 意义上的 "consumer" 之间存在差异。
A RabbitMQ Consumer 是协议的发明 - 基本上,它是 channel/connection 想要将消息推送给它的指定,在指定的消费者标签。从这个意义上讲,它只是通知代理立即发送消息。
在规范意义上,消息使用者是处理消息的任何代码。
因此,您的问题的答案是 "yes, go ahead and write your program to do that." 您可以控制规范的消费者代码。由您的软件决定如何处理来自队列的消息。
现在,如果您想知道 RabbitMQ 是否可以将消费者重新订阅到不同的队列,答案是 "that's not how it works." 在 RabbitMQ 中,消费者只是对订阅队列请求的响应- 它是一个 "consumer tag" 对象。订阅的持续性与 channel/connection 对有关。
你应该怎么做? 虽然你的代码没有指定任何特定的编码语言,但在我看来,你问这个问题就偏离了轨道。订阅两个队列。如果工人无事可做,我认为计算机会对此非常满意。如果您担心特别繁忙的队列发出过多的工作,您可以使用多种技术来限制进入该消费者的消息。一种流行的技术是 prefetch.