2014-10-04 102 views
0

我有兩個類二者延伸untypedActor和我創建另一個演員Ç到 通過使用A的的getContext()。觀看(actorRef觀看這兩個行動者/ b),當那些兩個演員A,B中的任何一個被終止時,我得到一個Terminated消息給C,在這個消息中,我需要在某個任務之後重新啓動它,具體取決於哪個actor是A或B。阿卡得到類型演員

How我可以知道哪個演員被任何方法終止,如

if(terminatedActor instanceOf A){ 
    // Do task on termination of A 
    // create A 
}else if(terminatedActor instanceOf B){ 
    // Do task on termination of B 
    // create B 
} 
+1

在你的情況下,介於另一個「管理層」之間是可行的,所以一箇中間管理人員只處理As,另一個只處理Bs? – tariksbl 2014-10-04 15:06:41

+0

是的,但是如果有更多不同演員的演員被監控 – achuth 2014-10-05 11:42:13

回答

0

我需要只監視2-3種類型的actor,所以我爲每種類型實現了不同的監視器。

2

由於ActorRef只是實現的代理,因此它不會爲您提供所需的信息。

我管理這個的方式是存儲一個對我在監督者中創建的演員的引用,它指示了類型。有多種方法可以做到這一點,我使用的一種方法是將ActorRef存儲在Map中。然後,您可以使用Terminated ActorRef從Map中獲取值,告訴您它是什麼類型。或者只需在UntypedActor上創建內部屬性來保存參考,然後選中一個,直到找到匹配並重新創建它。

+0

我已經這樣做了,並試圖知道akka是否提供任何設施來這樣做 – achuth 2014-10-04 10:36:25

+0

啊對,不是我所知道的。據我所知,這是實現你所需要的標準方法。 – nickebbitt 2014-10-04 10:51:48