如何为system.actorOf创建的角色设置Akka supervisor



如何为使用系统上下文创建的两个参与者设置两个不同的主管策略:

val exporter = system.actorOf(Props[DataExporter], name = "dataExporter")
val communicator = system.actorOf(Props[DeviceCommunicator], name = "deviceCommunicator")

我可以在处理异常时检查参与者类型吗?

你应该创建更深层次的actor,而不是旋转顶层actor并让Akka对它们进行不同的操作。

您应该创建定义不同策略的顶级参与者(system.actorOf),而他们反过来应该创建您的"员工"。演员。所以你会有两个顶级的参与者来定义你所解释的策略。他们应该让儿童演员使用context.actorOf。这样你就定义了"当我的孩子失败时该怎么做"的层次结构。

换句话说,保持顶层参与者为"监督者",在那里定义监督者,并让他们创建执行实际工作的子角色。

参见docs:容错

我不认为有办法在一个演员内部定义多个监督策略。但是,您可以创建另一个层,其中包含两个参与者,每个参与者实现一个特定的策略,并让它们将消息转发给各自的工作参与者。

val exporter = system.actorOf(Props[DataExporterSupervisor], ...)
val communicator = system.actorOf(Props[DeviceCommunicatorSupervisor], ...)

class DataExporterSupervisor extends Actor {
  val exporter = system.actorOf(Props[DataExporter], ...)
  override val supervisorStrategy = ???
  def receive = {
    case _ => exporter forward _
  }
}

class DeviceCommunicatorSupervisor extends Actor {
  val communicator = system.actorOf(Props[DeviceCommunicator], ...)
  override val supervisorStrategy = ???
  def receive = {
    case _ => communicator forward _
  }
}

最新更新