【问题标题】:How to release resources when tearing down an Akka graph?拆除 Akka 图时如何释放资源?
【发布时间】:2019-08-12 05:10:19
【问题描述】:

我有这个代码:

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

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

我知道how to stop an actor。当图形停止时,我该如何安排呢?

【问题讨论】:

  • Actor 和 Akka 流共享 ActorSystem 吗?
  • @mdm 是的,它们共享同一个 ActorSystem。
  • 能否将返回类型调整为(Flow[Any, Any, NotUsed], ActorRef)?然后,您可以在具体化后使用适合您用例的任何关闭方法(毒丸等)。
  • @LeviRamsey 我可以,但我希望有某种方法可以将它全部封装在这个函数中。

标签: scala akka akka-stream


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-02-14
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多