【问题标题】:Akka timeout resource leakAkka 超时资源泄漏
【发布时间】:2020-03-11 19:03:58
【问题描述】:

我有一个关于 Akka 超时的问题。

例如,我有一个主管 Actor,它向 DBActor 发送一条消息以开始读取数据库。 Supervisor 将超时设置为 5 秒。

DBActor 开始读取数据库;它获取 ResultSet,然后进入循环迭代 ResultSet 行并构建返回值。

然后 Supervisor 遇到超时异常并从 .recover 块返回一个值

我的问题是;在 TimeoutException 之后 DBActor 是否继续循环遍历 ResultSet ?因为那将是资源泄漏。

【问题讨论】:

  • 您是否已经创建了一个小样本?一年前,我创建了并且演员在超时到期后仍在工作。演员的接收不是资源安全的。也许我错了,smth已经改变了。
  • DBActor 不会自动通知 Supervisor 中的超时,除非您明确将其作为消息发送。如果需要取消“下游”操作,您可能应该使用其他一些并发机制,例如 Java 的可取消期货或类似的。

标签: scala timeout akka


【解决方案1】:

DBActor 独立于主管,将继续处理记录,直到完成或被告知停止。主管放弃当前请求并不重要,因为 DBActor 不知道这一点。如果您希望进程提前停止,主管将不得不向 DBActor 发送另一条消息,告诉它中止操作。主管还必须处理超时后结果到达的情况。

另外请注意,Scala 不能“泄漏”资源,因为它实现了垃圾回收。如果资源在某处积累,那是因为对该资源的引用被一个对象持有。

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    相关资源
    最近更新 更多