繁体   English   中英

阿卡:如何删除儿童演员

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM