如何为使用系统上下文创建的两个参与者设置两个不同的主管策略:
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 _
}
}