2017-07-19 1 views
0

Welche Beziehung besteht hinsichtlich der Pooleinstellungen zwischen dem von der API auf Anforderungsebene verwendeten Superpool und dem zwischengespeicherten Pool, der von der API auf Hostebene erstellt wurde?Akka-http - Konfiguration von Pools für Anforderungen und Hostressourcen

Um mehr Kontext zu bieten: Ich muss den gleichen Host/Endpunkt mit schnellen, reaktionsschnellen Anfragen und mit teureren Anfragen abfragen. Meine derzeitige Strategie besteht darin, Http().singleRequest() für die billigen Abfragen und einen zwischengespeicherten Host-Pool zu verwenden, um die teureren Abfragen zu isolieren. Ich möchte sicherstellen, dass die teuren Abfragen nicht alle Verbindungen ausnutzen, die im Super-Pool verfügbar sind.

Bin ich richtig in meiner Erwartung, dass sie tatsächlich 2 separate Pools sein werden, obwohl sie auf den gleichen Host zeigen? Wenn ja, gibt es eine Möglichkeit, die Max-Connection-Anzahl für den Super-Pool und für den Cache-Pool separat zu konfigurieren? Ich sehe nur eine Einstellung in der Datei reference.conf.

Antwort

0

Ich glaube, wenn Sie keine anderen Konfigurationen angeben, wird Akka-HTTP den zugrunde liegenden Pool zwischenspeichern und teilen. Dies gilt für beide Aufrufe Http().singleRequest(...) und Http().cachedHostConnectionPool(...).

Wenn Sie verschiedene Pools wollen, ist der Trick, verschiedene Konfigurationen zur Verfügung zu stellen, als docs Zustand:

Beachten Sie, dass, wenn Sie Pools mit unterschiedlichen Konfigurationen für den gleichen Ziel-Host Wunsch erhalten Sie unabhängige Pools erhalten .

Beide singleRequest und cachedHostConnectionPool Anrufe nehmen einen optionalen settings: ConnectionPoolSettings Parameter. Sie können dies von der Standardvorlage erstellen und die Parameter, die Sie optimieren möchten, z.

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

Als @Stefano Bonetti sagen, denn dies ist die einfache Abhilfe ist akka-http verwenden unterschiedliche gecached Pools durch Konfiguration, zum Beispiel zu erzwingen, wenn Sie singleRequest() api verwenden, können Sie den User-Agent ändern und dann akka Erstellen Sie verschiedene Pools für Sie, ein Codebeispiel in Java kann sein:

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 
Verwandte Themen