gpt4 book ai didi

java - 将 ActorRef 获取到先前生成的 EventSourcedBehavior

转载 作者:行者123 更新时间:2023-12-02 08:44:58 24 4
gpt4 key购买 nike

我们通过扩展 EventSourcedBehavior 将事件源与 Akka Persistence 结合使用。当我们创建持久性 Actor 时,我们通过使用 uuid 给它一个唯一的名称(与我们在 create 中使用的相同名称来构建 PersistenceId ,用于实体分片):

UUID uuid = UUID.randomUUID();
String name = MyBehavior.nameFor(uuid);

ActorRef<Command> actorRef =
context.spawn(MyBehavior.create(uuid), name);

稍后,当我们想要向 actor 发送进一步的命令时,我们希望得到 ActorRef<Command>从上下文来看,自从 actorRef spawn 返回的对象引用将不再在范围内。将命令视为后续 HTTP 请求的结果。

我们不能使用context.getChild(name)当它返回ActorRef<Void>时.

我们还考虑过通过接待员发现参与者,但文档称它无法扩展到任意数量的参与者:

https://doc.akka.io/docs/akka/current/typed/actor-discovery.html#receptionist-scalability

另一方面,类型化不支持 ActorSelection,如以下链接所示:

https://doc.akka.io/docs/akka/current/typed/from-classic.html#actorselection

我们不确定这里的方法是否正确。任何帮助将不胜感激。

最佳答案

如果我正确理解你的问题,你想访问之前生成的 Actor 的 ActorRef。这是我通常做的事情。

private final Map<String, ActorRef<Command> instanceIdToActor = new HashMap<>();

private ActorRef<Command> getActorRef(String instanceId) {
ActorRef<Command> instanceActor = instanceIdToActor.get(instanceId);
if (instanceActor == null) {
instanceActor = getContext().spawn(MyBehavior.create(), instanceId);
instanceIdToActor.put(instanceId, instanceActor);
}

return instanceActor;
}

每当 Actor 死亡时,您还必须删除引用。

instanceIdToActor.remove(instanceId);

关于java - 将 ActorRef 获取到先前生成的 EventSourcedBehavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61142328/

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