gpt4 book ai didi

java - 如何知道我得到了一个不存在或已死的 Actor

转载 作者:行者123 更新时间:2023-11-30 11:10:04 25 4
gpt4 key购买 nike

我试图将我的代码从 Akka 2.0 迁移到 2.3。我遇到了几个问题。

public synchronized ActorRef getActor(Class<? extends UntypedActor> clsActor, String sID)
{
String sName = clsActor.getName() + "-" + sID;
ActorRef actor = m_actorSystem.actorFor("user/" + sName);
if (actor.isTerminated())
actor = m_actorSystem.actorOf(new Props(clsActor), sName);
return actor;
}

这是一个 Actor 调度员。如果这个 Actor 死了或不存在,它会创建一个新的 Actor 。

但在 Akka 2.3 中,isTerminated() 已被弃用。

public ActorRef getActor(Class<? extends UntypedActor> clsActor, int id)
{
String sName = clsActor.getName() + "-" + id;
ActorRef actor = m_actorSystem.actorSelection("user/" + sName).anchor();
return actor;
}

我找回了一个 Actor ,但我不知道它是否还活着,直到我发出消息。当然,它没有用。

如何修复此代码?

谢谢。

最佳答案

您可以考虑使用类似于您已有的 ActorSelection,但您需要对其调用 resolveOne 以查找它并返回 Future。然后您可以评估结果。

public ActorRef getActor(Class<? extends UntypedActor> clsActor, int id)
{
String sName = clsActor.getName() + "-" + id;
ActorSelection sel = m_actorSystem.actorSelection("user/" + sName);
Timeout timeout = new Timeout(100, TimeUnit.MILLISECONDS);
Future<ActorRef> fut = sel.resolveOne(timeout);
ActorRef actor= Await.result(fut, timeout.duration());

return actor;
}

如果 actor 不存在,将抛出 ActorNotFound 异常,因此您应该决定要在哪里处理它。

另外,请注意 Await.result 调用的阻塞性质。

关于java - 如何知道我得到了一个不存在或已死的 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27856438/

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