在akka中,当actor执行逻辑并获得异常时,执行任务的线程会发生什么

问题描述 投票:0回答:1

我有一个演员与数据库连接。当从控制器上调用fire&forget模型调用actor时,我们选择tell方法而不是ask。执行数据库操作时出现问题时,我们会收到异常。我们不会捕获异常或在那里进行严格的错误处理。那么,在这种情况下,与数据库的连接会发生什么,因为它突然退出异常?将被删除或仍悬挂并创建被攻击的线程。请指教。

在使用tell方法在Akka中调用Actor处理数据库时,忽略错误处理也是明智的。

java akka playback
1个回答
0
投票

Akka演员的主要原则之一是让它粉碎。因此,演员获得异常是可以的,默认情况下它将由其主管重新启动。您可以在他们的文档fault-tolerance-akka中找到有关Akka中容错的更多信息。所以当有一个例外情况时,这些是解决此问题的2个快速解决方案:

  1. 从控制器重试策略:不使用ask但在执行DB操作时通知supervisor没有异常。在这种情况下,监督者可以在缓冲区中跟踪已经向演员请求演员的写操作。当控制器收到来自actor的OK时,它可以将它从缓冲区中删除,在另一种情况下,如果在超时中没有收到响应,你可以重试,即使该actor由于异常而被粉碎(actor的mailRef将是相同的和演员将重新启动)。
  2. **管理异常**:您可以管理异常并在演员粉碎后在主管中处理,具体取决于您可以定义要执行的操作的异常。

我更喜欢第一种选择,但是火与遗忘模型总是存在这种风险。另一个选项但更难实现的是向actor添加持久性并将消息记录为事件。在这种情况下,演员将拥有在粉碎后重试操作所需的信息。

© www.soinside.com 2019 - 2024. All rights reserved.