如何为使用系统上下文创建的两个actor设置两个不同的超级用户策略:
val exporter = system.actorOf(Props[DataExporter], name = "dataExporter")
val communicator = system.actorOf(Props[DeviceCommunicator], name = "deviceCommunicator")
我可以在处理异常期间检查演员类型吗?
答案 0 :(得分:4)
不是让顶级演员旋转并让Akka对他们采取不同的行动,你应该创建更深层次的演员层次。
你应该创建定义不同策略的顶级演员(system.actorOf
),然后他们应该创建你的“工人”演员。所以你会有2个顶级演员 - 按照你的解释定义策略。他们应该使用context.actorOf
开始儿童演员。通过这种方式,您可以定义“当我的孩子失败时该怎么做”的层次结构。
换句话说,将顶级演员保持为“监督者”,在那里定义监督,并让他们创造孩子来完成实际工作。
另请参阅文档:Fault Tolerance
答案 1 :(得分:2)
我认为没有办法在一个演员内部定义多个监督策略。但是你可以创建另一个包含两个actor的层,每个actor都实现一个特定的策略,并让它们将消息转发给相应的worker actor。
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 _
}
}