Akka和管理者的策略

Akka和管理者的策略,akka,akka-supervision,Akka,Akka Supervision,我是Akka的新手,但我对Stop指令的理解是,当儿童应被视为永久停止服务时,它在监管策略中使用,但有一种方法可以处理整个停机 如果这种理解是正确的,那么我想做的是,在正常/主要子级停止并从那时起作为后备使用后,应该有某种“后备参与者”参与。例如,假设我有一个家长演员,他有一个孩子演员-通知者-,他的工作是发送电子邮件。如果通知程序确实死亡(例如,底层邮件服务器脱机),则此参与者的备份可能是另一个参与者,例如,QueueClient,它将通知请求发送到消息代理,消息将在稍后排队并重播 我如何定义

我是Akka的新手,但我对
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 _ => }
}