如何知道演员完成了它的执行?

时间:2015-11-19 10:26:52

标签: java akka

我想知道每个工人演员是否完成,来自主演员。 请帮助我 ... 我有一个mainActor 和Worker1 Worker2 Worker3。 这里Worker1 Worker2和Worker3正在执行并行。 如何识别每个工作人员是否已从mainActor完成?

2 个答案:

答案 0 :(得分:1)

依赖关系将您的主引用注入到工作者的构造函数中,并在工作完成时让主人知道。

以下是一个示例Worker:

<a xlink:href="//google.com">
    <image width="438" height="189" xlink:href="button.png"></image>
</a>

以及基于documentation的主要演员定义的附带示例:

public class CompletedJob {
  public ActorRef actorRef;
  CompletedJob(ActorRef actorRef_i) { actorRef = actorRef_i;}
}

class WorkerActor extends UntypedActor {

  private ActorRef masterRef;

  //pass masterRef into the constructor
  WorkerActor(ActorRef masterRef_i) {
    masterRef = masterRef_i;
  }

  public void onReceive(Object message) throws Exception {
    if(message instanceof Work) {
      Work work = (Work) message; 
      getSender().tell(longProcess(work), getSelf()); //send result to work sender
      masterRef.tell(CompletedJob(getSelf()), getSelf()); //send completion to master
    }
  }
}

答案 1 :(得分:0)

akka中存在一些关闭情况的文档模式,您可以轻松地在您的情况下重用:

Shutdown patterns

作者称这些模式中的一种&#34; Reaper&#34;,它本质上是一个专门的演员,其任务是等待其他类型的演员死亡。