我有以下Akka演员:
public class MyActor extends AbstractActor {
protected Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public Receive createReceive() {
return receiveBuilder()
.matchAny(message -> {
String myFullName = self().path().toString();
String myName = self().path().name();
ActorRef reincarnatedMe = context().actorFor(self().path().name());
String reincarnatedFullName = reincarnatedMe.path().toString();
String reincarnatedName = reincarnatedMe.path().name();
log.info("myFullName: {}", myFullName);
log.info("myName: {}", myName);
log.info("reincarnatedFullName: {}", reincarnatedFullName);
log.info("reincarnatedName: {}", reincarnatedName);
}).build();
}
}
在运行时它将产生以下输出:
05:43:14.617 [MySystem-akka.actor.default-dispatcher-4] INFO myapp.actors.MyActor - myFullName: akka://MySystem/user/MyActor
05:43:14.623 [MySystem-akka.actor.default-dispatcher-4] INFO myapp.actors.MyActor - myName: MyActor
05:43:14.623 [MySystem-akka.actor.default-dispatcher-4] INFO myapp.actors.MyActor - reincarnatedFullName: akka://MySystem/user/MyActor/MyActor
05:43:14.623 [MySystem-akka.actor.default-dispatcher-4] INFO myapp.actors.MyActor - reincarnatedName: MyActor
我的理解是context().actorFor(...)
不会创建 new actor,而是找到与您提供的路径/字符串匹配并返回的现有actor对此的引用。
但是,在上面的代码中,self()
似乎是reincarnatedMe
的父级,myFullName
就是“ MySystem/user/MyActor
”,而reincarnatedFullName
是“ MySystem/user/MyActor/MyActor
” ...
我读对了吗?如果是这样,我该如何调用context().actorFor(...)
(或与此有关的任何其他方法),以使myFullName
与reincarnatedFullName
相同(这样self()
和{{1} }引用同一个演员?如果我没有读正确的话,为什么reincarnatedMe
与myFullName
不同?
reincarnatedFullName
答案 0 :(得分:2)
首先,不赞成使用selectedRow = field[:, col]
for nextEmptySpace in np.nditer(selectedRow[ : :-1]):
if selectedRow[int(nextEmptySpace)] == 0:
break
else:
return 0 // if full
field[int(nextEmptySpace), col] = value
,而赞成ActorContext.actorFor(String)
。此方法返回一个ActorSelection,但是您仍然可以向ActorSelection发送一条消息(例如Identify,该消息会自动以ActorIdentity消息进行响应)。
ActorContext.actorSelection(String)
方法的文档说:“像actorOf(ActorPath)的查找所描述的那样,查找akka:// appname / user / actorA之类的绝对URI。”我找不到关于actorFor
方法的文档,但是其他actorOf(ActorPath)
方法却声明它们创建了新的参与者,因此我怀疑这样做是否相同。您发现的行为可能是弃用的原因-或因为不赞成使用该行为以及用于其他用途的方法。