Akka http-请求和主机级池的配置
在池设置方面,请求级API使用的超级池与主机级API创建的缓存池之间的关系是什么 为了提供更多的上下文:我需要查询具有快速响应请求和更昂贵请求的相同主机/端点。我目前的策略是使用Akka http-请求和主机级池的配置,akka,akka-http,Akka,Akka Http,在池设置方面,请求级API使用的超级池与主机级API创建的缓存池之间的关系是什么 为了提供更多的上下文:我需要查询具有快速响应请求和更昂贵请求的相同主机/端点。我目前的策略是使用Http().singleRequest()进行廉价查询,并使用缓存主机池“隔离”更昂贵的查询。我想确保昂贵的查询不会耗尽超级池中所有可用的连接 即使它们指向同一个主机,我的期望是否正确,它们确实是两个独立的池?如果是这样,有没有办法分别为超级池和缓存池配置(比如最大连接数)?我在reference.conf文件中只看到
Http().singleRequest()
进行廉价查询,并使用缓存主机池“隔离”更昂贵的查询。我想确保昂贵的查询不会耗尽超级池中所有可用的连接
即使它们指向同一个主机,我的期望是否正确,它们确实是两个独立的池?如果是这样,有没有办法分别为超级池和缓存池配置(比如最大连接数)?我在
reference.conf
文件中只看到一个设置。我相信如果不指定不同的配置,Akka HTTP将缓存底层池并共享它。这适用于Http().singleRequest(…)
和Http().cachedHostConnectionPool(…)
调用
如果需要不同的池,诀窍是提供不同的配置,如状态:
请注意,如果您为
相同的目标主机将获得独立的池
singleRequest
和cachedHostConnectionPool
调用都采用可选的settings:ConnectionPoolSettings
参数。您可以从默认参数创建此参数,并调整要调整的参数,例如
Http().cachedHostConnectionPool("localhost", 80, ConnectionPoolSettings(system).withMaxConnections(2000))
正如@Stefano Bonetti所说,简单的解决方法是强制akka http按配置使用不同的缓存池,例如,如果您使用singleRequest()api,您可以更改用户代理,然后akka为您创建不同的池,java中的代码示例可以是:
UserAgent userAgent = UserAgent.create(ProductVersion.create("akka-http", "1.0", actorPath));
ConnectionPoolSettings setting = ConnectionPoolSettings.create(context().system())
.withConnectionSettings(ClientConnectionSettings.create(context().system())
.withUserAgentHeader(Optional.of(userAgent)));
http.singleRequest(httpRequest, http.defaultClientHttpsContext(), setting, context().system().log(), materializer).... Here code to handle the response