Akka和管理者的策略
我是Akka的新手,但我对Akka和管理者的策略,akka,akka-supervision,Akka,Akka Supervision,我是Akka的新手,但我对Stop指令的理解是,当儿童应被视为永久停止服务时,它在监管策略中使用,但有一种方法可以处理整个停机 如果这种理解是正确的,那么我想做的是,在正常/主要子级停止并从那时起作为后备使用后,应该有某种“后备参与者”参与。例如,假设我有一个家长演员,他有一个孩子演员-通知者-,他的工作是发送电子邮件。如果通知程序确实死亡(例如,底层邮件服务器脱机),则此参与者的备份可能是另一个参与者,例如,QueueClient,它将通知请求发送到消息代理,消息将在稍后排队并重播 我如何定义
Stop
指令的理解是,当儿童应被视为永久停止服务时,它在监管策略中使用,但有一种方法可以处理整个停机
如果这种理解是正确的,那么我想做的是,在正常/主要子级停止并从那时起作为后备使用后,应该有某种“后备参与者”参与。例如,假设我有一个家长演员,他有一个孩子演员-通知者-,他的工作是发送电子邮件。如果通知程序
确实死亡(例如,底层邮件服务器脱机),则此参与者的备份可能是另一个参与者,例如,QueueClient
,它将通知请求发送到消息代理,消息将在稍后排队并重播
我如何定义这样的监管策略
,使其内置容错/参与者备份?请展示代码示例,这是我学习的唯一方法 在默认指令之外覆盖管理者策略是不常见的,并且在您的情况下也不是真正必要的。一个解决方案是从父级监视子级参与者,当父级发现子级已停止时,请与备份参与者联系
导入akka.actor.SupervisorStrategy.Stop
输入akka.actor_
class Parent extends Actor {
var child: ActorRef = context.actorOf(Props[DefaultChild])
context.watch(child)
def receive = {
case Terminated(actor) if actor == child =>
child = context.actorOf(Props[BackupChild])
}
override def supervisorStrategy = OneForOneStrategy() {
case ex: IllegalStateException => Stop
}
}
class DefaultChild extends Actor {
def receive = { case _ => throw new IllegalStateException("whatever") }
}
class BackupChild extends Actor {
def receive = { case _ => }
}