Wir verwenden permanente Verbindungen und haben versucht, Verbindungen nach x Zeit zu erzwingen. Während ich sehe, können wir theoretisch ConnectionKeepAliveStrategy verwenden, was ich sagen kann, gilt das nur nach einer Antwort..i.e. während die Verbindung inaktiv ist.Apache HttpClient loadbalancing Poolverbindungen
Das Problem, das wir haben ..
Angenommen, 1 Client, Schlagen 2 Servern (A, B) über einen Loadbalancer. Wenn einer der Server offline geht (B), werden alle neuen Verbindungen auf dem Server (A) hergestellt. Wenn nun der andere Server (B) wieder online ist, bleibt er im Leerlauf, da alle Verbindungen auf dem anderen Server (A) sind. Solange der Client weiterhin auf eine Verbindung unterhalb des Leerlauf-Timeouts/Keepalives zugreift, wird dies fortgesetzt und der B-Server bleibt im Leerlauf (auch mit Null-Verbindungen).
Was wir tun wollen..zwingt, dass alle persistenten Verbindungen periodisch geschlossen werden (innerhalb eines 'randomisierten Zeitfensters'. Idealerweise wollen wir nicht, dass alle Verbindungen gleichzeitig zurückgesetzt werden). Irgendwelche Vorschläge dazu?
Wir versuchten zu erweitern HttpClientConnectionManager
, und zu verfolgen, wie lange eine Verbindung offen für gewesen war, dann schließen Sie es nach x Menge Zeit ... aber das scheint nicht zu funktionieren. Ich vermute, das liegt daran, HttpClientConnection
ist nicht tatsächlich die eigentliche Verbindung, sondern ist eher ein Proxy und sieht aus wie unter diesem Proxy, es ist tatsächlich "Verwendung" einer der etablierten Verbindungen, so macht es unmöglich, tatsächlich die Zeit zu verfolgen diese zugrunde liegenden Verbindungen wurden für.
Gedanken?
Gerade jetzt spiele ich mit der Idee, einfach zu rufen: auf 1 Verbindung pro Minute, nachdem wir eine Anfrage darauf ausgeführt haben, die ich denke, würde uns etwas näher an das gewünschte Verhalten bekommen.
Haben Sie die Kontrolle über den Load Balancer? Vielleicht ist eine Lösung, sticky Sitzungen zu deaktivieren. – kuporific
Es gibt keine sticky-Sitzungen, seine Round-Robbin..aber sobald die persistente Verbindung erstellt wird .. es bleibt..nachdem die persistenten Verbindungen periodisch geschlossen werden müssen, so dass der lb wieder über die Server loadbalance kann. – danomano
Hatten Sie in diesem Szenario einen Durchbruch? Ich habe genau das gleiche Szenario, um nach soliden Ideen zu suchen, wie ich damit umgehen kann. – jagamot