[英]Akka: How to remove child actor
我有一个父母演员和孩子。 每个儿童演员控制一个设备。 当我创建它们时,我给所有儿童演员一个uuid。
每个子actor都是由设备配置创建的,当配置发生变化时,我想通过以下方式重新创建actor:
阻止旧的:
final Future stopped = gracefulStop(actorRef,Duration.create(1,TimeUnit.SECONDS)); Await.result(已停止,Duration.create(1,TimeUnit.SECONDS));
重新创建一个新的:
context.actorOf(Props.create(GateActor.class,() - > new GateActor(hardwareRouterActorRef,settings)),settings.getUuid())
但它抛出一个异常: akka.actor.InvalidActorNameException: actor name [6237255c-851b-47d2-ac31-03c7635e6537] is not unique!
我认为gracefulStop代码不会删除子actor,我的问题是:如何删除子actor?
我还尝试用PoisonPill删除一个演员:
actorRef.tell(PoisonPill.getInstance(), getSelf());
从官方文档 :
请记住,停止演员及其名称被取消注册是彼此异步发生的单独事件。 因此,在gracefulStop()返回后,您可能会发现该名称仍在使用中。 为了保证正确的注销,只能从您控制的主管内重用名称,并且只能响应终止消息,即不适用于顶级参与者。
因此,只有在Terminated
主管演员应注册的Terminated
消息后,才应使用循环名称执行actor的创建。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.