gpt4 book ai didi

java - rabbitMQ 从 2 个队列消费

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:24 26 4
gpt4 key购买 nike

我必须编写重负载系统,任务非常简单。因此,我决定将此任务拆分为不同位置(或云)的多个工作人员。为了进行通信,我想使用rabbitmq队列。

在我的系统中将有两种软件节点:调度程序和工作人员。调度程序将从queue_input中获取用户输入,将其拆分为较小的任务并将该较小的任务放入workers_queue中。工作人员读取此队列并“执行操作”。我在这里使用了循环负载平衡 - 只要某些工作人员崩溃,一切都工作得很好。然后我丢失了有关任务完成的信息(不允许执行两次单一操作,每个任务包含一组使用不同数据执行工作代码的 50 次迭代)。

我考虑像 Technical_queue 这样的东西 - 调度程序-工作人员通信的另一个 channel ,我想知道如何以良好的方式设计它。我使用了rabbitmq页面的教程,所以我的工作线程看起来像:

while(true) {
message = consume(QUEUE,...);
handle(message); //do 50 simple tasks in loop for data in message
}

我如何处理第二个队列?另一个线程我们有一些 while(true) {} 循环?或者有更好的解决方案吗?也许我应该通过主题交换重用现有队列? (但我希望在处理任务时有独立的沟通方式,这可能需要一些时间。

最佳答案

您或许应该看看 (doc)。我不想告诉你添加一个层,但是 spring 库用它的 SimpleMessageListenerContainer 处理线程问题和线程管理。 。每个容器都会进入一个队列,您可以指定每个队列的线程数(即工作线程)。

或者,您可以使用 ExecutorService 创建自己的服务,但最终您可能会重写 SimpleMessageListenerContainer 的功能。此外,您还可以执行(通过操作系统或批处理脚本)更多进程,这将为每个队列添加更多消费者。

就队列拓扑而言,它完全依赖于业务逻辑/关注点,通常较少依赖于性能需求。更常见的是,出于业务原因,您有更多的队列,出于性能原因,您有更多的工作人员,但如果队列使用相同类型的消息进行备份,请考虑为该类型的消息提供其自己的队列。您的描述听起来像是两个队列,工作人员队列上有多个消费者。

除了线程问题和队列拓扑之外,我不完全确定您还问什么。

关于java - rabbitMQ 从 2 个队列消费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com