【问题标题】:Can a BackoffSupervisor have multiple children actors?BackoffSupervisor 可以有多个子actor吗?
【发布时间】:2019-09-18 14:31:04
【问题描述】:

我所有的actors都继承自BaseActor并且可以用registerActor()创建子actor

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

【问题讨论】:

    标签: kotlin akka akka-supervision


    【解决方案1】:

    BackoffSupervisors 仅支持单个(直接)子级。

    如果你想重新使用BackoffSupervisor,唯一的方法是引入另一个主管作为它的孩子:

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

    /user/dad/backoffsupervisorBackoffSupervisor/user/dad/backoffsupervisor/supervisor 是观察其子代(foobar)并在任一子代停止时停止,将故障级联到退避主管。

    p>

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 2019-10-14
      • 2017-02-15
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多