gpt4 book ai didi

java - Actor 名字不是唯一的 - AKKA

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:25 24 4
gpt4 key购买 nike

我在 JAVA 中使用 Akka 2.10。

我有一个为我获取 Actor 引用的方法 - 或者创建一个(如果之前没有) - 但有时当我尝试创建一个时,我收到以下异常:

akka.actor.InvalidActorNameException: actor name [<ActorName>] is not unique!
at akka.actor.dungeon.ChildrenContainer$NormalChildrenContainer.reserve(ChildrenContainer.scala:130)
at akka.actor.dungeon.Children$class.reserveChild(Children.scala:77)
at akka.actor.ActorCell.reserveChild(ActorCell.scala:369)
at akka.actor.dungeon.Children$class.makeChild(Children.scala:202)
at akka.actor.dungeon.Children$class.attachChild(Children.scala:42)
at akka.actor.ActorCell.attachChild(ActorCell.scala:369)
at akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:552)

当然,我知道,异常很明显:我试图创建多个具有相同标识符的 Actor ,但我只是在找不到 Actor 的引用时才这样做。及时:

private static ActorRef getActor(String id,Class actor) throws Exception{
ActorSelection sel = system.actorSelection(system.child(id));
Timeout t = new Timeout(4, TimeUnit.SECONDS);
AskableActorSelection asker = new AskableActorSelection(sel);
scala.concurrent.Future<Object> fut = asker.ask(new Identify(1), t);
ActorRef actorClient = null;
try{
//Try to get an Actor reference
ActorIdentity ident = (ActorIdentity)Await.result(fut, t.duration());
actorClient = ident.getRef();
} catch(Exception e){
System.out.println("Error:"+id);
} finally{
//IF I dont found create a new One
if(actorClient==null){
actorClient = system.actorOf(Props.create(actor),id);
//THROWS ME AN EXCEPTION
}
}
return actorClient;
}

我等了 4 秒没有答案...所以我创建了一个新的。

我通过针对我的案例的解决方案搜索了 Internet,但没有成功...

谁能帮我解决这个问题?

非常感谢!

最佳答案

根据documentation你不应该重复使用 Actor 路径,即使 Actor 已经死了。我的猜测是您之前已经创建了一个具有该名称的 Actor ,它已经死亡并且现在无法通过 Actor 选择机制找到。在尝试创建一个具有该名称的新 Actor 时,您遇到了这个异常。

关于java - Actor 名字不是唯一的 - AKKA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com