BackoffSupervisor可以有多个子演员吗?

时间:2019-09-18 14:31:04

标签: kotlin akka akka-supervision

我所有的演员都继承自BaseActor,可以使用registerActor()创建子演员

abstract class BaseActor() : AbstractLoggingActor() {

    protected fun registerActor(childProps: Props, name: String): ActorRef {
        val child = context.child(name)
        val supervisorProps = BackoffSupervisor.props(
            BackoffOpts.onFailure(
                childProps,
                name,
                java.time.Duration.ofSeconds(1),
                java.time.Duration.ofSeconds(30),
                0.2 // adds 20% "noise" to vary the intervals slightly
            ).withAutoReset(FiniteDuration(20, TimeUnit.SECONDS))
        )

        return if (child.isEmpty) {
            context.actorOf(supervisorProps, "supervisor_$name").also { addChildRoutee(it) }
        } else {
            child.get()
        }
    }
}

当演员/user/dad使用registerActor()创建2个子演员时,却创建了2个主管

/user/dad/supervisor_foo/foo
/user/dad/supervisor_bar/bar

如何重用同一个主管来监督foobar

/user/dad/supervisor/foo
/user/dad/supervisor/bar

1 个答案:

答案 0 :(得分:2)

BackoffSupervisor仅支持一个(直接)孩子。

如果您想重复使用BackoffSupervisor,唯一的方法是引入另一个主管作为其下属:

/user/dad/backoffsupervisor/supervisor/foo
/user/dad/backoffsupervisor/supervisor/bar

/user/dad/backoffsupervisorBackoffSupervisor的地方,而/user/dad/backoffsupervisor/supervisor是监视其子项(foobar)并在任何一个子项停止时停止的演员,将故障级联给退避主管。