2017-07-19 54 views
0

請求級API使用的超級池與主機級API創建的高速緩存池之間的池設置有何關係?Akka-http - 請求和主機級池的配置

爲了提供更多上下文:我需要以快速響應的請求和更昂貴的請求來查詢同一主機/端點。我目前的策略是使用便宜的查詢使用Http().singleRequest(),並使用緩存的主機池來「隔離」更昂貴的查詢。我想確保昂貴的查詢不會耗盡超級池中的所有可用連接。

我對我的期望是否確實是2個獨立的池,即使它們指向相同的主機?如果是這樣,是否有辦法爲超級池和緩存池分別配置最大連接數?我只在reference.conf文件中看到一個設置。

回答

0

我相信如果你不指定不同的配置,Akka-HTTP將緩存底層池並共享它。這適用於Http().singleRequest(...)Http().cachedHostConnectionPool(...)調用。

如果你想不同的游泳池,關鍵是要提供不同的配置,爲docs狀態:

需要注意的是,如果你要求有不同的配置池來 同一目標主機您將獲得獨立的游泳池。

兩個singleRequestcachedHostConnectionPool調用一個可選的settings: ConnectionPoolSettings參數。您可以從默認設置創建它,並調整要調整的參數,例如

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

由於@Stefano博內蒂說,簡單的辦法解決這個很給力阿卡-HTTP通過配置使用不同的緩存池,例如,如果你使用singleRequest()API,您可以更改用戶代理,然後阿卡爲您創建不同的池,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