BackoffSupervisor 可以有多个儿童演员吗?

Can a BackoffSupervisor have multiple children actors?

我所有的演员都继承自 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

BackoffSupervisors只支持单个(直接)child.

如果你想 re-use 一个 BackoffSupervisor 唯一的方法是介绍另一位主管作为其 child:

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

其中 /user/dad/backoffsupervisorBackoffSupervisor/user/dad/backoffsupervisor/supervisor 是观看其 children 的演员(foobar)并在 child 停止时停止,将故障级联到退避主管。