0

关于我正在构建的新 akka 应用程序,我遇到了设计挑战。问题/挑战是:在客户端我做了一个简单的演员,它发送一个请求,然后使用 become() 等待正确的服务器回答,当然还包括超时消息,以防万一我不'不能在适当的时候得到答复。然而,有趣的是在服务器端。在这里,我有以下结构:

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

然后演员 A 将消息转发给演员 A1、A2...Ax,这一切都是在演员 A 的上下文中创建的,这意味着它是他们的监督者。

在正常情况下,Axe 只能回复发件人,因为消息已转发,但是......如果出现错误,我想除了将其记录在服务器日志上之外,还给用户 som有关已发生错误的信息。

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

另一种方法是覆盖每个子actor上的prerestart()方法,然后制定主管策略以在抛出异常时重新启动actor。但是,这将要求我为 x 个子演员实现此方法。

有什么好的建议,如果这可以从主管策略中获得?

提前致谢。

4

2 回答 2

1

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

于 2013-09-02T06:18:17.413 回答
0

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

于 2013-09-01T12:14:28.097 回答