Akka通知远程演员有错误

时间:2013-09-01 09:31:08

标签: akka actor remote-actors akka-supervision

我正在构建一个新的akka​​应用程序的设计挑战。 问题/挑战是: 在客户端,我创建了一个简单的actor,它发送一个请求,然后使用become()来等待正确的服务器答案,当然还包括一个超时消息,以防我没有得到正确的答案时间。 然而,有趣的是在服务器端。 在这里,我有以下结构:

Actor A(配置为循环路由器)此路由器正在接收来自客户端的所有请求。

演员A然后将消息转发给演员A1,A2 ... Ax,这些都是在演员A的上下文中创建的,这意味着它是他们的主管。

在正常情况下,Actor Ax可以只回复发件人,因为邮件是转发的,但是...... 如果出现错误,我想在服务器日志上记录它,同时也为用户提供有关已发生错误的信息。

在完美的世界中,我更愿意能够以某种方式在主管策略中说出类似getErrorActorsLastSender()的内容,然后获取导致该问题的客户端的ActorRef。我更喜欢这个的原因是,我会有一个地方可以处理所有的错误,并且所有不可见的异常总是至少以某种通用方式处理。

另一种方法是覆盖每个子actor上的prerestart()方法,然后使supervisor策略在抛出异常时重新启动actor。但是,这需要我为x子actor执行此方法。

如果主管策略可以做到这一点,那么有什么好的建议吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您是否尝试过创建自己的主管策略,例如扩展OneForOneStrategy?有一种名为handleFailure的方法,它采用(以及其他)儿童和失败的原因。此外,您将获得ActorContext,它会为您提供导致错误的消息的发件人,我认为您应该能够在覆盖此方法时执行您想要的操作。

答案 1 :(得分:0)

实现目标的一种方法是将发件人封装在Exception中。如果您自己抛出异常,这应该是直截了当的。