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

时间:2017-07-19 21:20:23

标签: akka akka-http

请求级API使用的超级池与主机级API创建的缓存池之间的池设置有什么关系?

提供更多上下文:我需要使用快速响应请求和更昂贵的请求来查询相同的主机/端点。我目前的策略是使用Http().singleRequest()进行廉价查询,将缓存的主机池用于"隔离"更昂贵的查询。我想确保昂贵的查询不会耗尽超级池中的所有可用连接。

我是否正确地期望它们确实是2个独立的池,即使它们指向同一个主机?如果是这样,有没有办法为超级池和高速缓存池分别配置最大连接数?我只在reference.conf文件中看到一个设置。

2 个答案:

答案 0 :(得分:1)

我相信如果你没有指定不同的配置,Akka-HTTP将缓存底层池并共享它。这适用于Http().singleRequest(...)Http().cachedHostConnectionPool(...)来电。

如果您需要不同的池,诀窍是提供不同的配置,如docs状态:

  

请注意,如果您请求具有不同配置的池   相同的目标主机,您将获得独立的池。

singleRequestcachedHostConnectionPool次调用都会使用可选的settings: ConnectionPoolSettings参数。您可以使用默认值来创建它,并调整要调整的参数,例如

Http().cachedHostConnectionPool("localhost", 80, ConnectionPoolSettings(system).withMaxConnections(2000))

答案 1 :(得分:1)

正如@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