gpt4 book ai didi

java - Akka:在 child Actor 完成后停止 Actor

转载 作者:搜寻专家 更新时间:2023-11-01 03:50:50 25 4
gpt4 key购买 nike

我经常发现自己使用一个“主”actor,它为子任务创建了许多子 actor。当子任务完成时,主角也应该停下来。因此,当 context.children.isEmpty 时,我会观看 child Actor 并停止主要 Actor 。

我经常使用这种模式,但因为我从未读过它。 我不确定这是个好主意还是失败的 actors 是否存在问题......?

我读过 Shutdown Patterns in Akka 2 , 但这种方法在 Java 中似乎比我的解决方案更复杂?

这是我的伪代码,主要 Actor 有两个子任务:

class MainActor extends AbstractActor {

public MainActor() {
receive(ReceiveBuilder
.match(SubTask1Response.class, this::handleSubTask1)
.match(SubTask2Response.class, this::handleSubTask2)
.match(Terminated.class, x -> checkFinished())
.build());
}

@Override
public void preStart() throws Exception {
context().watch(context().actorOf(SubTask1Worker.props(), "subTask1"));
context().watch(context().actorOf(SubTask2Worker.props(), "subTask2"));
}

private void checkFinished() {
if(context().children().isEmpty()) {
context().stop(self());
}
}

// ...
}

(我必须使用 Java 8 :-(,但如果您能为我提供另一种解决方案,我也很乐意阅读 Scala 代码)

最佳答案

所以 context().children().isEmpty()似乎按预期工作。

但是在调试我的 Akka 应用程序时,我发现这种方法还有另一个问题:当 Terminated 时,它不是确定性的。消息到达 MainActor : 有时会有 TerminatedSubTask1Response 之前 发送消息来自示例!

我现在更改了我的代码以自己计算正在运行的 child 并在 MainActor 时递减数量收到结果响应 SubTask[1,2]Response .

=> 所以我不会推荐我原来的模式。

关于java - Akka:在 child Actor 完成后停止 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28872990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com