Akka通知远程参与者错误

Akka通知远程参与者错误,akka,actor,remote-actors,akka-supervision,Akka,Actor,Remote Actors,Akka Supervision,对于我正在构建的新akka应用程序,我有一个设计挑战。 问题/挑战是: 在客户端,我制作了一个简单的actor,它发送一个请求,然后使用been()来等待正确的服务器应答,当然还包括一条超时消息,以防在正确的时间内没有得到应答。 然而,有趣的是在服务器端。 这里我有以下结构: 参与者A(配置为循环路由器)此路由器正在接收来自客户端的所有请求 然后,参与者A将消息转发给参与者A1、A2…Ax,这些消息都是在参与者A的上下文中创建的,这意味着它是参与者A的主管 在正常情况下,Actor Ax将能够只

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

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

然后,参与者A将消息转发给参与者A1、A2…Ax,这些消息都是在参与者A的上下文中创建的,这意味着它是参与者A的主管

在正常情况下,Actor Ax将能够只回复发件人,因为消息是转发的,但是。。。 在发生错误的情况下,除了将其记录在服务器日志中之外,我还想向用户som提供有关已发生错误的信息

在完美的世界中,我更希望能够以某种方式在主管策略中只说一些类似getErrorActorsLastSender()的话,然后获取导致问题的客户端的ActorRef。我之所以喜欢这样做,是因为这样我就有了一个地方来处理所有的错误,所有不可预见的异常都会以某种通用的方式处理

另一种方法是在每个子参与者上重写prerestart()方法,然后在引发异常时使主管策略重新启动参与者。然而,这需要我为x个子角色实现这个方法

有什么好的建议吗?如果主管的策略允许的话


提前感谢。

实现目标的一种方法是将发送者封装在异常中。如果您自己抛出异常,这应该很简单。

您是否尝试过创建自己的主管策略,例如通过扩展?有一种称为
handleFailure
的方法,它(除其他外)获取子项和故障原因。您还将获得ActorContext,它为您提供了导致错误的消息的发送者,我认为当您重写此方法时,您应该能够做您想做的事情。

我考虑过这一点,但我希望避免的主要事情是,开发人员应该始终记住如何做。如果我能把它放在主管里,我一定不会忘记在这种情况下给演员A添加新的孩子。另外,所有的错误处理都在一个地方。另外一点,我不是自己创建异常。这实际上是一个很好的地方。现在我有了发信人。但是,作为一项附带要求,当错误发生时,我是否也可以拥有参与者正在处理的消息?该消息应该可以从ActorContext、currentMessage IIRCI使用Akka 2.2.1访问,我似乎找不到方法currentMessage(),请参考API。顺便说一句,谢谢你的帮助。对不起,我只是想查一下。我的意思是内部对象(ActorCell)中的私有字段,您无法访问它。我在调试期间看到了它,并认为有一种方法可以访问它。信息在那里,但我找不到检索它的方法。嗯,我实际上认为我可以找到正确的发送者。但我在OneForOneStrategy中得到的背景似乎与它失败时不一样。当我在上下文中请求sender()时,我得到的是失败的子参与者,而不是最初向失败的参与者发送消息的人。