演员不能正确地阻止他们的孩子?

时间:2015-05-21 17:18:05

标签: scala akka

我有一个叫Validator的演员。 actor的目的是验证消息。每条消息都有自己的UUID,每条消息都通过设置唯一名称来创建自己的Validator实例。标识为17285ed2-ffdb-11e4-a322-1697f925ec7b的邮件的Actor路径如下所示:/user/protocols/17285ed2-ffdb-11e4-a322-1697f925ec7b。显然,一旦验证了消息,演员就会被停止。

Validator在其层次结构中有两个actor。他们都负责消息的不同部分和独立。以下是它们的创建方式:

override def preStart() {
    actorOf(Props[IdValidator], "schema-validator")    ! schema
    actorOf(Props[PayloadValidator], "info-validator") ! info
}

如果我有异常,则根据默认监督策略重新启动Validator,并且因为在actor类的每个新实例上调用preStart,它会尝试重新创建层次结构。当它试图这样做时,actorOf抛出一个异常,说演员名称不是唯一的(即 /用户/协议/ 17285ed2-ffdb-11e4-a322-1697f925ec7b /模式验证器)

根据文档,停止儿童的过程是重启过程的一部分。更重要的是,它是同步完成的 - 运行时将确保每个孩子通过向他们的DeathWatch发送Terminated消息来报告其停止。

显然,我可以通过删除儿童的明确名称来解决这个问题,但我的问题是 - 这是一种预期的行为,保证儿童演员不会真正删除他们(他们似乎仍然作为旧的一部分存在层次)

0 个答案:

没有答案