我的情况是这样的。
我可以想到的一个初始解决方案是增加max-open-requests设置。但是这里的问题是我不知道需要预先发送的报告数量。
有人可以建议其他解决方案,例如限制通过Futures.traverse发生的并行性
答案 0 :(得分:3)
由于您用akka
标记了此问题,所以我假设您使用akka-http进行呼叫。您可以使用akka-streams批量发出请求,从而避免连接溢出,例如:
Source(reportsVector)
.grouped(safeValue)
.mapAsync(1)(reps => Future.traverse(reps)(x => ...)) //do your stuff
.mapConcat(identity)
.runWith(Sink.seq)
该示例将一次执行safeValue
并发调用,并将所有结果收集到一个集合中,当整个流完成时将返回该集合。您还可以与sliding
和splitWhen
等其他运算符一起使用,以使其更适合您的用例,还可以调整safeValue
和mapAsync
并发值。请注意,该流的来源是一个已知矢量(reportsVector
),但它也可能是未知的有限报告流。