Akka http-请求和主机级池的配置

Akka http-请求和主机级池的配置,akka,akka-http,Akka,Akka Http,在池设置方面,请求级API使用的超级池与主机级API创建的缓存池之间的关系是什么 为了提供更多的上下文:我需要查询具有快速响应请求和更昂贵请求的相同主机/端点。我目前的策略是使用Http().singleRequest()进行廉价查询,并使用缓存主机池“隔离”更昂贵的查询。我想确保昂贵的查询不会耗尽超级池中所有可用的连接 即使它们指向同一个主机,我的期望是否正确,它们确实是两个独立的池?如果是这样,有没有办法分别为超级池和缓存池配置(比如最大连接数)?我在reference.conf文件中只看到

在池设置方面,请求级API使用的超级池与主机级API创建的缓存池之间的关系是什么

为了提供更多的上下文:我需要查询具有快速响应请求和更昂贵请求的相同主机/端点。我目前的策略是使用
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