0

我正在尝试改进系统中参与者的错误处理。有时,在处理数据时,出现问题,我需要停止并重新启动actor,并记录有关此故障的一些信息。

我有一个主管,有 5 个演员为它工作。所以我需要能够监督他们所有人。我找到了这个链接:

https://doc.akka.io/docs/akka/current/typed/fault-tolerance.html

关于这一点,但我认为在哪里实现代码并不是很清楚:

Behaviors.supervise(behavior).onFailure[IllegalStateException](SupervisorStrategy.restart)

这段代码到底应该去哪里?

谢谢

4

1 回答 1

0

你可以把它想象supervisor成另一个behavioiur包裹着你behaviour的东西。

假设您想要关注 HelloWorld 演员。

object HelloWorldActor {

  sealed trait Command
  case class HelloCommand(name: String) extends Command

  def apply(): Behavior[Command] =
    Behaviors.receiveMessage[Command] { 
      case msg: HelloCommand =>
        println(s"Hello ${msg.name}")
        Behaviors.same
    }

}

现在,您可以用“主管”“包装”这种“行为”

object SupervisedHelloWorldActor {

  sealed trait Command
  case class HelloCommand(name: String) extends Command

  def apply(): Behavior[Command] =
    Behaviors.supervise(
      Behaviors.receiveMessage[Command] { 
        case HelloCommand(name) =>
          println(s"Hello ${name}")
          Behaviors.same
      }
    ).onFailure(onFailure[IllegalStateException](SupervisorStrategy.restart))

}
于 2021-10-04T11:33:34.387 回答