我需要编写一个负载较重的系统,但任务比较简单。因此,我决定将这些任务拆分为多个位于不同位置(或云)的工作节点。为了通信,我想使用rabbitmq队列。
在我的系统中,将有两种软件节点:调度程序和工作节点。调度程序将从queue_input中获取用户输入,将其拆分为较小的任务,并将这些较小的任务放入workers_queue中。工作节点读取此队列并“执行任务”。我在这里使用了轮询负载平衡-当一些工作节点崩溃时,所有工作都非常顺利,然后我会失去关于任务完成的信息(不允许执行单个操作两次,每个任务包含50个迭代的工作代码与不同数据)。
我考虑了一些类似technical_queue的东西-另一个用于调度程序-工作节点通信的通道,我想知道如何以良好的方式设计它。我使用了来自rabbitmq页面的教程,因此我的工作线程看起来像:
while(true) {
message = consume(QUEUE,...);
handle(message); //do 50 simple tasks in loop for data in message
}
我该如何处理第二个队列?另外一个线程使用while(true) {}循环,还是有更好的解决方案?也许我应该重用现有的主题交换队列吗?(但我想在处理任务时拥有独立的通信方式,这可能需要一些时间。)