RabbitMQ 2队列

RabbitMQ 2队列,rabbitmq,message-queue,priority-queue,Rabbitmq,Message Queue,Priority Queue,看到了相似的问题,但不同的预期答案。我的问题是,我是否可以创建一个使用者来关注单个队列,直到它清空,然后切换到另一个队列,直到新工作发送到其主队列 例如:1队列包含大量要在较长时间内处理的工作,例如,它自己的专用使用者3。第二个队列接收的工作更少,需要的处理更少。如果第二个队列的消费者完成了他们的工作,我可以让他们切换到第一个队列,直到他们的队列收到更多的工作吗?我认为对于这个问题,重要的是要记住,规范意义上的消费者与RabbitMQ意义上的消费者是有区别的 RabbitMQ使用者是协议的一种发

看到了相似的问题,但不同的预期答案。我的问题是,我是否可以创建一个使用者来关注单个队列,直到它清空,然后切换到另一个队列,直到新工作发送到其主队列


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

我认为对于这个问题,重要的是要记住,规范意义上的消费者与RabbitMQ意义上的消费者是有区别的

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

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

所以,你的问题的答案是肯定的,继续写你的程序去做。您可以控制规范的消费者代码。由您的软件决定如何处理从队列到达的消息

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


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

澄清的要点很好。我应该做的一件事是,我不明白为什么语言对java很重要,但听起来RabbitMQ本身无法进行这种配置。当一个队列清空时,我可以通过编程方式将使用者切换到另一个队列。我希望有一个内置的方式来消费多个。不过,在你提到预回迁之前,确实有一些困惑。不担心消费者负担过重。只是想提高效率。谢谢你的回答,似乎“不”基本上是对的。我想你可能有点过度设计了。。。只需将消息转储到处理器中。我个人倾向于按消息类型划分队列,因此在逻辑上,让多个不同的队列具有相同类型的消息是没有意义的。此外,这与消息的SLA有关。一个队列的数量很大,SLA不受限制,而另一个队列的数量小得多,SLA几乎立即生效。没有任何东西可以阻止其他工作人员执行基本的。进入另一个队列。