【问题标题】:Does any actor model in java allow grouping of tasks to be done?java中的任何actor模型是否允许对任务进行分组?
【发布时间】:2014-09-28 14:25:17
【问题描述】:

我在 mysql 中有 1000 行数据,我需要根据某些逻辑进行更新,由于某种原因,这些逻辑无法在 mysql 中使用批量更新完成,必须在 java 中完成。我需要将作业拆分为 20 个可管理的单元每个任务 50 个任务,所以对于每个组,我将有 50 个演员来完成这项工作。

我做了这张图来说明我的意思

Java 中的什么演员模型可以让我以这种方式对演员进行分组?

【问题讨论】:

  • 嗯,Akka (akka.io) 肯定能做到。
  • 他的文档中似乎没有关于演员分组主题的部分。
  • 嗯,你会有一个演员,它产生了 50 个子演员来完成这项工作。当它们全部终止时,演员会再启动 50 次。还是您的意思是更自动的?
  • 这就是我的意思。 Sub-actors 对我来说是一个新概念。Sub-actors 可以在彼此之间传递消息吗?。无论如何,我认为 akka 会像线程组一样有一个处理 actor 的部分。
  • 我所说的“副演员”是指主管演员的下属。当然,你可以让演员互相交谈。 Akka 有一个分层命名系统,允许参与者找到彼此; "../*" 将是所有兄弟演员的名字。

标签: java actor actor-model


【解决方案1】:

正如@Bob 所指出的,您可以使用Akka 轻松做到这一点。你的 Actor 监督层次结构是这样的:1 个 SuperMaster Actor,启动 20 个 Master Actor,每个负责一个工作块。他们向SM 询问工作,并创建了50 个Slave 演员,将工作委托给他们。您可以设置一个Supervision Strategy 来确定一个 Slave 是否死了,您需要重新启动该工作,或者您是否应该放弃整个“组”并告诉 SuperMaster 这组工作失败等。如果所有Slave 完成了他的工作,它告诉Master。如果所有工作都已完成(M 收到 50 条“工作完成”消息),它可以告诉 SuperMaster 所有工作都已完成,我们已完成处理工作。

您可以很好地使用 Akka 的监督层次结构对失败和恢复进行建模(如“继续尝试直到成功”或“如果组失败则中止所有执行”等)。至于传播工作——是的,这也很容易,并且在我如何布置监督互动中已经部分描述了。

希望这会有所帮助,祝你愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多