rabbitmq - RabbitMQ 2 队列
问题描述
看到类似的问题,但预期的答案不同。我的问题是我可以创建一个消费者专注于一个队列,直到它清空然后切换到另一个队列,直到新的工作被发送到他们的主队列?
例如:1 个队列包含要在较长时间内处理的大量工作及其自己的专用消费者(例如 3 个)。第二个队列接收的工作更少,需要更少的处理。如果第二个队列的消费者完成了他们的工作,我可以让他们切换到第一个队列,直到他们的队列收到更多工作吗?
解决方案
我认为对于这个问题,重要的是要记住规范意义上的“消费者”与 RabbitMQ 意义上的“消费者”之间存在差异。
RabbitMQ 消费者是协议的一个发明 - 基本上,它是通道/连接希望在指定的消费者标签下将消息推送到它的指定。从这个意义上说,它只是通知代理立即发送消息。
在规范意义上,消息消费者是处理消息的任何代码段。
所以,你的问题的答案是“是的,继续写你的程序来做到这一点。” 您可以控制规范的消费者代码。由您的软件决定如何处理来自队列的消息。
现在,如果您想知道 RabbitMQ 是否可以将消费者重新订阅到不同的队列,答案是“它不是这样工作的”。在 RabbitMQ 中,消费者只是对订阅队列请求的响应——它是一个“消费者标签”对象。订阅的持续性质与通道/连接对相关。
你该怎么办?虽然您的代码没有指定任何特定的编码语言,但在我看来,您甚至问这个问题都偏离了轨道。订阅两个队列。如果工人无事可做,我认为计算机会对此非常满意。如果您担心一个特别繁忙的队列会发出过多的工作,您可以使用多种技术来限制进入该消费者的消息。一种流行的技术是预取。
推荐阅读
- exception - 在 wso2 上抛出异常
- twitter-bootstrap - 当 .card-body 内容溢出时,在 .card-header 上同时设置 height 和 d-flex 不起作用
- rust - 如何对包含 &mut 枚举的元组进行模式匹配并在匹配臂中使用该枚举?
- laravel-5 - 无法扩展 Laravel 模型
- spring-boot - Spring boot aspectj gradle编译时编织问题
- javascript - 如何在 vh 和 vw 中而不是在像素中获得位置?
- amazon-web-services - 如何选择通过 Amazon Pinpoint 重新接收 SMS 消息
- javascript - 我应该在我的函数中指定值类型吗?JavaScript/JQuery
- postgresql - 在 postgres 中使用选定列中的值添加时间间隔
- laravel-5 - 如何在 Laravel 资源控制器的 store 方法中访问自动增量值