2014-10-04 99 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