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
如何重复使用同一个主管来监督 foo
和 bar
?
/user/dad/supervisor/foo
/user/dad/supervisor/bar
BackoffSupervisor
s只支持单个(直接)child.
如果你想 re-use 一个 BackoffSupervisor
唯一的方法是介绍另一位主管作为其 child:
/user/dad/backoffsupervisor/supervisor/foo
/user/dad/backoffsupervisor/supervisor/bar
其中 /user/dad/backoffsupervisor
是 BackoffSupervisor
而 /user/dad/backoffsupervisor/supervisor
是观看其 children 的演员(foo
和 bar
)并在 child 停止时停止,将故障级联到退避主管。
我所有的演员都继承自 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
如何重复使用同一个主管来监督 foo
和 bar
?
/user/dad/supervisor/foo
/user/dad/supervisor/bar
BackoffSupervisor
s只支持单个(直接)child.
如果你想 re-use 一个 BackoffSupervisor
唯一的方法是介绍另一位主管作为其 child:
/user/dad/backoffsupervisor/supervisor/foo
/user/dad/backoffsupervisor/supervisor/bar
其中 /user/dad/backoffsupervisor
是 BackoffSupervisor
而 /user/dad/backoffsupervisor/supervisor
是观看其 children 的演员(foo
和 bar
)并在 child 停止时停止,将故障级联到退避主管。