我必须编写重负载系统,任务很简单。所以我决定把这个任务分成不同位置(或云)的多个工人。为了交流我想使用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) {} 循环?还是有更好的解决方案?也许我应该通过主题交换重用现有队列?(但我想有独立的沟通方式,同时处理任务,这可能需要一些时间。