scala - 使用折叠的 Akka 流程未完成
问题描述
我有一些大致如下所示的代码:其中 A 是两个 Maps 的元组
def methodName(): Flow[A, B, NotUsed] = {
val filter = Flow[A].map(a => a._2.slice(0, 2))
val split = Flow[A._2]
.mapConcat(identity)
.map(t => {
B.random
})
.fold(B.empty)((a, b) => {
new B(a._1, a._2 ++ Seq(b._1), a._3 ++ Seq(b._2), a._4)
})
val logK = Flow[B].log("K", c => {
log.info("here")
})
filter.via(split).via(logK)
}
但是当我运行这个时,流在折叠阶段停止,我不明白为什么。我可以确认 A._2 中的集合已完全用尽,当我用不同的操作替换折叠时,流程继续进行并且没有被阻塞。据我所知,上游mapConcat正在调用completeStage。所以我不确定为什么折叠阶段没有接到那个电话并且知道继续下一阶段。
解决方案
所以看来这是我使用的akka版本的一个bug:akka: "2.5.23", akkaHttp: "10.1.10"
当我升级到 akka: "2.6.8" 和 akkaHttpV = "10.2.0" 时,一切都按预期工作
推荐阅读
- scala - 如何将向量的列或序列转换为稀疏矩阵?
- javascript - 用于在 javascript 中录制视频的 Ziggeo 元配置文件参数
- c# - 时间:2019-04-01 标签:c#fizzbuzz自动数字生成器
- angular - 仅从模块材料中应用日期选择器年份修复
- python - 具有命名占位符替换的多行字符串格式
- python - FileToGoogleCloudStorageOperator 的替代方案
- memory - 进程之间的内存空间如何保持不同?
- ios - 删除 UITableView 部分中的所有内容后结束编辑
- nuget - VSTS 更改为 DevOps,现在我们的 Nuget 包没有进行身份验证。我们做什么?
- c# - 我有两个 WPF 控件,但是当我刷新它们的数据绑定时,只有一个在刷新