我认为使用隐藏在这里的Akka可能会有更广泛的应用程序设计问题,但我会问一个如何设置一个监督树,其中“内核”或“顶级”主管可能会监督其他主管的孩子主管工人?
答案 0 :(得分:1)
您可以从顶层的声明性主管开始
val kernel = Supervisor(
SupervisorConfig(
OneForOneStrategy(List(classOf[Exception]), 3, 1000),
Supervise(
actorOf[Module1],
Permanent) ::
Supervise(
actorOf[Module2],
Permanent) ::
Supervise(
actorOf[Module3],
Permanent) ::
Nil
)
)
其中模块1到3表示应用程序体系结构的下一级。每个模块本身都是其所有子actor的监督者,并且实现了例如
class Module1 extends Actor {
self.faultHandler = OneForOneStrategy(List(classOf[Throwable]), 5, 5000)
def receive = {
case Register(actor) =>
self.link(actor)
}
}
您可以使用更适合您的应用程序的内容替换“Register(actor)”消息,并且您可能希望跨越另一个以编程方式创建的主管层,但基本上这将是要遵循的方法。
您可以在Fault tolerance with Scala或Fault tolerance with Java上的官方akka文档中找到更多详细信息(如Viktor已经评论过的那样)。