ClientExecChain あたりの挙動メモ
実際に処理する順番
- MainExcec
- decorateMainExec()
- ProtocolExec
- decorateProtocolExec()
- RetryExec
- RedirectExec
- ServiceUnavailableRetryExec
- BackoffStrategyExec
MainExec
たぶん実際にリクエストを行なう部分
decorateMainExec()
HttpClientBuilder を継承したクラスで実装する部分っぽい。
実装例としては httpcomponent-cache の CachingHttpClientBuilder がある。
ProtocolExec
正直よくわからん
decorateProtocolExec()
HttpClientBuilder を継承したクラスで実装する部分っぽい。 が、ProtocolExec がわからんので正直よくわからん。
RetryExec
何らかの IOException レベルの http protocol が返ってこないような例外を検知した後 再度リクエストをし直す。
リトライ条件は HttpRequestRetryHandler を介して設定する。
DefaultHttpRequestRetryHandler では下記の例外の場合はリトライしない。
- InterruptedIOException.class
- UnknownHostException.class
- ConnectException.class
- SSLException.class
RedirectExec
リクエスト内でリダイレクトが発生する場合にリダイレクト先に変更してまたリクエストし直す部分っぽい。
ServiceUnavailableRetryExec
HTTP ステータスが返ってきたあとにリトライする場合の処理を記述するらしい。
BackoffStrategyExec
コネクション数を動的に制御する場合にコネクション数を減らさなければならない条件を表す部分っぽい。
コネクション数を動的に制御する部分は BackoffManager が行っている。 HttpClient がデフォルトで実装してあるのは AIDM (Additional increase, multiplicative decrease) というアルゴリズムであり、コネクションは加算増加乗算減少を行なうらしい。
decrease 条件は ConnectionBackoffStrategy で記述して 設定する。 デフォルトの DefaultBackoffStrategy では 503 Servie Unavailable になった場合にコネクション数が減少する挙動をする。