当前位置: 首页 > 知识库问答 >
问题:

Akka通知远程参与者错误

曹高阳
2023-03-14

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

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

参与者A然后将消息转发给参与者A1、A2。。。Ax都是在演员A的背景下创建的,这意味着它是他们的主管。

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

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

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

有什么好的建议,如果这是可能的从主管战略?

提前谢谢。

共有2个答案

湛骏祥
2023-03-14

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

黄正浩
2023-03-14

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

 类似资料:
  • 我正在尝试在Scala上实现AKKA http和一些Actor。我用Akka创建了一个web应用程序。但我在一个或两个不同的路由上有这个错误/16。(显然是随机的): 服务器无法及时响应您的请求。请稍后再试! 你能给我解释一下为什么和怎么修吗?我对Akka真的是新手。 主类:

  • 我的用例是,我想建立一个运行Akka Actors的节点集群。每个参与者都是同一参与者的实例,用于处理与特定用户的WebSocket连接。每个参与者都将使用唯一的路径注册自己。在非集群设置中,我可以简单地通过其路径调用actor,如其中,是actor实例的唯一名称。我必须将消息传递给这些参与者,这样他们才能将消息发送回各自的WebSocket客户端。 显然Akka集群提供了各种设置:http://

  • 我正在尝试使用类型化执行器版本2.6.3和akka http版本10.1.11,而在非类型化执行器中都运行良好,现在我得到了编译错误

  • ``` 所以,我的问题是--有没有一种干净的方法来结构和重构路由,而不是将它们集中在一个大的路由定义中?我也许可以创建一个参与者(路由器)的层次结构,主路由定义只是将其委托给路由器,随着我们深入参与者层次结构,我们会逐步添加更多的细节。但是否有一两种普遍接受的模式来组织路线呢?

  • 我刚才比较了scala Actor和java线程的性能。 我很惊讶地看到了这种差异,我观察到我的系统最多只能生成2000个线程(一次活动),但在同一个系统中,我只能生成500,000个Scala参与者。

  • 我很难弄清楚我如何知道我的演员何时从非演员代码中完成。 尝试使用akka演员进行并行执行,这似乎真的很好,但我需要知道何时所有人都完成了。 我添加了一个监督者演员,产生演员来做工作,从监督者/父演员,我可以观看孩子的终止消息。 我需要从akka actor系统之外的常规java代码中得到帮助,以确定我的监督actor是否完成。 这是否可能,请提供指针。 谢谢哈瑞