2015-11-19 74 views
0

我想知道每個工人演員是否完成,從主演。 請幫我... 我有一個mainActor 和Worker1 Worker2 Worker3。 這裏Worker1 Worker2和Worker3並行執行。 如何識別每個工作人員是否從mainActor完成?如何知道演員完成了它的執行?

回答

1

依賴注入您的主引用到您的工作者的構造函數中,並讓工作完成後讓主人知道。

下面是一個例子工人:

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 
    } 
    } 
} 

並基於documentation碩士演員的定義,伴隨例如:

class MasterActor extends UntypedActor { 

    Router router; 
    { 
    List<Routee> routees = new ArrayList<Routee>(); 
    for (int i = 0; i < 5; i++) { 
     ActorRef r = getContext().actorOf(Props.create(Worker.class, getSelf())); 
     getContext().watch(r); 
     routees.add(new ActorRefRoutee(r)); 
    } 
    router = new Router(new RoundRobinRoutingLogic(), routees); 
    } 

    public void onReceive(Object message) throws Exception { 
    if(message instanceof Work) { 
     router.route(message, sender()); 
    } 
    if(message instanceof CompletedJob) { 
     //handle a job completed update 
    } 
    }  

} 
+0

thankyou ramon。你能給我在Java中的代碼....? – junsid

+0

修改爲使用java,雖然我沒有在java中編程幾個月,所以它可能不完全正確。但總的想法是... –

+0

好的。謝謝ramon – junsid

0

有在阿卡關機情況下,一些文件的模式,即您可以輕鬆地在您的情況下重複使用:

Shutdown patterns

作者稱這些模式之一爲「Reaper」,它本質上是一個專門負責等待其他類型演員死亡的專職演員。

+0

好的。謝謝回覆 – junsid

相關問題