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

Ale*_*yev 6 java architecture message-queue task

考虑一组有限的任务必须在一段时间内完成(在这段时间内均匀分布),然后一再重复.

在一个本地工作者/线程的情况下,我们只是做这样的事情(抱歉伪代码):

long interval = period / tasks.size

while (true) {
  for (task in tasks) { 
    task.do()
    sleep(interval)
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望以分布式方式,多个独立工作人员.

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

Gad*_*adi -1

您可以使用 Java-8 流运行stream.paralle(),如下所示:

    List<Task> tasks = new ArrayList<>();
    Stream.of(tasks).parallel().forEach(t -> t.doSomething());
Run Code Online (Sandbox Code Playgroud)

这将为您使用所有 CPU 资源。

如果您需要一个更像集群的解决方案,即通过网络运行,您有不同的选择,但它们都涉及一些框架。

我个人更喜欢 Vert.x,它很容易设置集群,并且使用事件总线可以分配工作负载。其他简单的选择是 Spring。