本文用到的MyWork的源代码:Akka-2.5.12学习系列(第一个Actor)
一个 Actor a 可以监控另一个 Actor b,当b被 context stop 或被 PoisonPill 毒死后,a 会收到一个 Terminated 信号。
有两种 watch 方式:第一种是 watch 一个独立的 Actor,第二种是 watch 子 Actor
watch 一个独立的 Actor
watch 另一个独立的 Actor,这个监控 Actor 也可以是独立的专门为监控而生的。
示例:
import akka.actor.*;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import cn.edu.tsinghua.akka.MyWork;
import com.typesafe.config.ConfigFactory;
/**
* Watch Actor观察myWork actor,当myWork actor挂掉后就停止系统
*/
public class WatchAnother extends UntypedAbstractActor {
LoggingAdapter logger = Logging.getLogger(getContext().system(), this);
static public Props props(ActorRef watchedActor) {
return Props.create(WatchAnother.class, () -> new WatchAnother(watchedActor));
}
/**
* 监听一个actor,这个actor挂了,就会给WatchActor发送个Terminated信号
* @param actorRef
*/
public WatchAnother(ActorRef actorRef){
getContext().watch(actorRef);
}
@Override
public void onReceive(Object msg) throws InterruptedException {
if(msg ins