Akka:如何删除儿童演员
问题描述:
我有一个父母演员和孩子。每个小孩演员控制一个设备。当我创建它们时,我会为所有的小孩演员提供一个uuid。Akka:如何删除儿童演员
每一个儿童演员是由设备配置,创造了当时的配置改变,我想重新由演员:
-
停止旧之一:
最终未来停止= gracefulStop( actorRef,Duration.create(1,TimeUnit.SECONDS)); Await.result(stopped,Duration.create(1,TimeUnit.SECONDS));
-
重新创建一个新的:
context.actorOf(Props.create( GateActor.class, () - >新GateActor(hardwareRouterActorRef,设置)), settings.getUuid())
但它抛出一个异常: akka.actor.InvalidActorNameException: actor name [6237255c-851b-47d2-ac31-03c7635e6537] is not unique!
我觉得gracefulStop代码不消除孩子的演员,我的问题是:我怎么能删除这个孩子的演员?
我也试图通过PoisonPill除去演员:
actorRef.tell(PoisonPill.getInstance(), getSelf());
答
请记住,一个演员停止,它的名字被注销 是独立的事件,彼此异步发生。 因此,可能会在 gracefulStop()返回后找到名称仍在使用中。为了保证正确注销, 仅重用来自您控制的主管人员的名称,并且仅在 响应终止消息时使用名称,即不适用于顶级参与者。
因此,只有在接收到主管参与者应注册的Terminated
消息后,才应该使用回收名称创建主角。