scala - 拆除 Akka 图时如何释放资源?
问题描述
我有这个代码:
def makeFlow()(implicit timeout: Timeout): Flow[Any, Any, NotUsed] = {
val ref: ActorRef = startActor()
Flow[Any].mapAsync(42)(ref.ask)
}
这将泄露演员。每次我具体化包含此流程的图形时,都会创建一个参与者。当图表被拆除时,这个演员不会被摧毁。
我知道如何阻止一个演员。当图表停止时,我如何安排这种情况发生?
解决方案
你的问题是你处于流级别,所以当使用它时,没有任何指示什么时候是销毁actor的正确时间。您可以让演员在空闲时间后为自己安排一颗毒丸,但这看起来很丑陋。因此,Levi Ramsey 的建议看起来是您最干净的选择。另一种方法是为 Graph 状态传递一个指标对象,如果这表明当前最后一个元素流过它,则可以在询问后发送毒丸。
推荐阅读
- python - 使用漂亮的汤从标签中提取适当格式的文本(中间有空格)
- migration - 无法从旧的 3.4.2 keycloak 迁移到最新版本
- python - 如果您不小心重复了一个测试,Python unittest 不会注意到
- angular - 在异步 for 循环中设置 div 的背景图像
- python - 如何追溯警告
- android - 单击推送通知时无法获取有效负载反应本机
- html - 我有一个卷轴,但我希望它们彼此独立。有没有办法解决这个问题?
- javascript - 在音频标签的 src 属性中隐藏直接链接的可能方法?需要屏蔽链接的通用目录
- angular - ng-bullet vs karma-parallel vs 先配置测试模块 - Angular 单元测试性能改进
- reactjs - 无法在 nrwl 反应工作区中加载 svg