。私は理論的にはConnectionKeepAliveStrategyを使うことができますが、私がこれを知ることができるのは、レスポンス後にのみ適用されるフォームです。接続はアイドル状態です。のApache HttpClientをロードバランシングプール接続
私たちが抱えている問題..
は、ロードバランサを経由して2台のサーバ(A、B)を押す、1つのクライアントを想定します。 サーバの1つがオフラインになると(B)、すべての新しい接続がサーバ(A)に対して確立されます。 他のサーバ(B)がオンラインに戻ると、すべての接続が他のサーバ(A)にあるので、アイドル状態のままです。クライアントがアイドルタイムアウト/キープアライブ以下の接続にアクセスしている間は、これが継続され、Bサーバはアイドル状態になります(別名ゼロ接続)。
私たちは定期的に閉じます(「ランダム化された時間ウィンドウ」内。理想的には、我々はすべての接続が同時にリセットしたくない)ために、すべての持続的な接続を強制do..isたいです。これを行う上での任意の提案?
私たちはHttpClientConnectionManager
を延長し、接続がどれだけ開いているかを追跡してからx時間後に閉じてみましたが、これはうまくいかないようです。私はそれが実際に実際の時間を追跡するために、その不可能を作るなど、確立された接続の1「を使用し」され、HttpClientConnection
は実際には実際の接続ではなく、プロキシで、このプロキシの下のように見えるので、これは推測していますそれらの根底にある接続が確立されている。
思考?
今私は、要求を実行した後、ただ単に1分あたり1接続で HttpRequestBase.abort()
と呼んでいます。希望の動作に近いものをいくつか得ることができます。
ロードバランサを制御していますか?たぶん1つの解決策は、粘着性セッションをオフにすることです。 – kuporific
固定セッションはありません。しかし、一度永続接続が作成されると、そのラウンドロビンになります。定期的に持続接続を閉じる必要があるため、lbはサーバー間で再度負荷バランスを取ることができます。 – danomano
このシナリオでは何かをしましたか?私はまさに同じシナリオを持って、それをどう対処するかについての強固なアイデアを探しています。 – jagamot