ClientExecChain あたりの挙動メモ

実際に処理する順番

  1. MainExcec
  2. decorateMainExec()
  3. ProtocolExec
  4. decorateProtocolExec()
  5. RetryExec
  6. RedirectExec
  7. ServiceUnavailableRetryExec
  8. 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 ステータスが返ってきたあとにリトライする場合の処理を記述するらしい。

http://stackoverflow.com/questions/24220324/httpclient-what-is-the-difference-between-serviceunavailableretrystrategy-and-h

BackoffStrategyExec

コネクション数を動的に制御する場合にコネクション数を減らさなければならない条件を表す部分っぽい。

コネクション数を動的に制御する部分は BackoffManager が行っている。 HttpClient がデフォルトで実装してあるのは AIDM (Additional increase, multiplicative decrease) というアルゴリズムであり、コネクションは加算増加乗算減少を行なうらしい。

decrease 条件は ConnectionBackoffStrategy で記述して 設定する。 デフォルトの DefaultBackoffStrategy では 503 Servie Unavailable になった場合にコネクション数が減少する挙動をする。