我正在使用Akka的HTTP客户端,而且我正在溢出连接池。输入伪代码:
Source(myIterator).map(... make an HttpRequest)
.via(Http().cachedHostConnectionPool[...](...))
.runForeach {
case (Success(req), _) =>
Await.ready(resp.discardEntityBytes().future(), 10 seconds)
}
我尝试创建一个非默认的ActorMaterializer,它将所有缓冲区设置为1,我仍然溢出连接池。
我想在调整性能之前不要修改池大小。
在我的阅读中,我怀疑Http流不会发出任何背压
信号,因为它驻留在一个Actor,类似于Sink.actorRef(...)
调用?
我想要的是(1)确认我没有错误地接近这一点,以及(2)亲爱的读者,你将如何减轻这种影响?我有一个解决方案,使用Actor来使用singleRequest()
API的Http()
方法来管理飞行请求,但这似乎有点过分。
此问题的演示示例是in a github project I made。您必须将HTTP URI指向一个大文件,以使连接速度减慢到足以耗尽默认连接池。
谢谢!