gpt4 book ai didi

java - 检索一个 Akka actor 或如果它不存在则创建它

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:44 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它创建一些 Akka 参与者来管理和处理来自 Kafka 主题的消息。具有相同 key 的消息由相同的参与者处理。我也使用消息键来命名相应的 Actor 。

当从主题中读取一条新消息时,我不知道 ID 等于消息键的参与者是否已经由 参与者系统 创建。因此,我尝试使用它的名字来解析 actor,如果它不存在,我就创建它。我需要管理关于参与者解析的并发性。因此,有可能不止一个客户端询问 actor 系统 actor 是否存在。

我现在使用的代码如下:

private CompletableFuture<ActorRef> getActor(String uuid) {
return system.actorSelection(String.format("/user/%s", uuid))
.resolveOne(Duration.ofMillis(1000))
.toCompletableFuture()
.exceptionally(ex ->
system.actorOf(Props.create(MyActor.class, uuid), uuid))
.exceptionally(ex -> {
try {
return system.actorSelection(String.format("/user/%s",uuid)).resolveOne(Duration.ofMillis(1000)).toCompletableFuture().get();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
}
});
}

以上代码没有优化,异常处理可以做得更好。

但是,在 Akka 中是否有更惯用的方法来解析 actor,或者在它不存在时创建它?我错过了什么吗?

最佳答案

考虑创建一个将消息 ID 映射到 ActorRef 的状态作为其状态的 actor。这个“接待员”actor 将处理所有获取消息处理 actor 的请求。当接待员收到对 Actor 的请求(该请求将包含消息 ID)时,它会尝试在其映射中查找关联的 Actor :如果找到这样的 Actor ,它将 ActorRef 返回给寄件人;否则它会创建一个新的处理 actor,将该 actor 添加到它的映射中,并将该 actor 引用返回给发送者。

关于java - 检索一个 Akka actor 或如果它不存在则创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229389/

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