首页 > 解决方案 > 拆除 Akka 图时如何释放资源?

问题描述

我有这个代码:

def makeFlow()(implicit timeout: Timeout): Flow[Any, Any, NotUsed] = {
  val ref: ActorRef = startActor()
  Flow[Any].mapAsync(42)(ref.ask)
}

这将泄露演员。每次我具体化包含此流程的图形时,都会创建一个参与者。当图表被拆除时,这个演员不会被摧毁。

我知道如何阻止一个演员。当图表停止时,我如何安排这种情况发生?

标签: scalaakkaakka-stream

解决方案


你的问题是你处于流级别,所以当使用它时,没有任何指示什么时候是销毁actor的正确时间。您可以让演员在空闲时间后为自己安排一颗毒丸,但这看起来很丑陋。因此,Levi Ramsey 的建议看起来是您最干净的选择。另一种方法是为 Graph 状态传递一个指标对象,如果这表明当前最后一个元素流过它,则可以在询问后发送毒丸。


推荐阅读