我正在尝试使用 ActorFor 获取现有的 ActorRef 或创建一个新的 ActorRef(如果它不存在)。我有以下代码,但它似乎没有按预期工作。 .isTermminate() 始终为 true。
ActorSystem system = ActorSystem.create("System");
ActorRef subscriberCandidate = system.actorFor("akka://System/user/"+name);
if (subscriberCandidate.isTerminated())
{
ActorRef subscriber = system.actorOf(new Props(new UntypedActorFactory() {
public UntypedActor create() {
return new Sub(name,link);
}
}), name);
System.out.println(subscriber.path().toString() + " created");
}
else
System.out.println("already exists");
我在这里缺少什么?提前致谢。
获取或创建只能由parent指定的 Actor 的,因为如果 Actor 不存在,则只有该父级可以创建该 Actor,并且只有父级可以一致地这样做(即没有竞争条件)。在演员中你可以做
// assuming a String name like "fred" or "barney", i.e. without "/"
final Option<ActorRef> child = child(name);
if (child.isDefined())
return child.get();
else
return getContext().actorOf(..., name);
不要在顶层执行此操作(即使用system.actorOf
),因为这样你就无法确定谁在请求创建方面“获胜”,并且依赖用户监护人也不是一个好的监督策略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)