首页 > 解决方案 > 循环消息/任务队列现有解决方案

问题描述

考虑有一组有限的任务必须在某个时间段内完成(也均匀分布在该时间段内),然后一次又一次地重复。

如果是一个本地工作者/线程,我们只需要这样做(抱歉伪代码):

long interval = period / tasks.size

while (true) {
  for (task in tasks) { 
    task.do()
    sleep(interval)
  }
}

现在我想以分布式方式执行此操作,有多个独立的工作人员。

对于这样的案例,是否有一些已知的最佳实践解决方案(最好来自 Java 世界)?循环消息队列?任务上的分布式锁?我用谷歌搜索了一下安静,但看不到任何优雅的开箱即用解决方案。

标签: javaarchitecturetaskmessage-queue

解决方案


我不认为有一个单一的“最佳”方法可以解决这个问题,因为这将是灵活性和均匀度保证强度之间的权衡。

在频谱的灵活端,只需在此期间的某个时间将每个任务随机分配给一个工人。这将不需要工作人员之间的通信,因此这是可扩展的和可并行的。您会期望事情应该相当均匀,尤其是在您有很多任务的情况下。

在频谱的强均匀性端,您应该按工作人员和时间段划分任务,如@Lino 所示。这将要求您提前知道您有多少工作人员等,并且它是不可并行的。

有许多替代方法介于这两个极端之间,以及混合方法。

要缩小答案范围,您需要提供有关您的限制条件和成功标准的更多详细信息。


推荐阅读