2021/09/29 このエントリーをはてなブックマークに追加 はてなブックマーク - Apache HttpComponentsのHttpClient 5.1系ではHttpClientBuilderのsetConnectionTimeToLiveメソッドの設定値が無視される場合があるから良い子のみんなは気をつけてくれよな

Apache HttpComponentsのHttpClient 5.1系ではHttpClientBuilderのsetConnectionTimeToLiveメソッドの設定値が無視される場合があるから良い子のみんなは気をつけてくれよな

カテゴリ: ,

ApacheのHttpClientを使っていて、httpのコネクション周りでハマった事象のメモ。

当該事象の原因はチームメンバーが見つけてくれたので、僕は「なんやて…??ホンマや!!」って言ってただけなのであしからず。
今後ハマる人が減ることを願ってメモを残しておきます。




'org.apache.httpcomponents:httpclient:4.5.13'

https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.5.13


org.apache.http.impl.client.HttpClientBuildersetConnectionTimeToLive メソッドは setConnectionManager メソッドで 自前の HttpClientConnectionManager connManager を設定している場合無視される


connectionManagerをセットしていないときだけsetConnectionTimeToLiveでセットした値を使っている。


HttpClientConnectionManager connManagerCopy = this.connManager;
if (connManagerCopy == null) {
    (略)            

    @SuppressWarnings("resource")  
    final PoolingHttpClientConnectionManager poolingmgr = new PoolingHttpClientConnectionManager(  
        RegistryBuilder.<ConnectionSocketFactory>create()  
            .register("http", PlainConnectionSocketFactory.getSocketFactory())  
            .register("https", sslSocketFactoryCopy)  
            .build(),  
 null, null,  dnsResolver,  
  connTimeToLive,  
  connTimeToLiveTimeUnit != null ? connTimeToLiveTimeUnit : TimeUnit.MILLISECONDS);
}

javadocにも書いてある。


Sets maximum time to live for persistent connections
Please note this value can be overridden by the setConnectionManager(HttpClientConnectionManager) method.

google 翻訳nizedすると以下。


持続的接続の最大存続時間を設定します
この値は、setConnectionManager(HttpClientConnectionManager)メソッドによってオーバーライドできることに注意してください。


以下2択と思われる

  • timeToLive を設定したconnectionManagerHttpBuilder に渡す
  • connectionManager を設定せず、HttpBuildersetConnectionTimeToLive する

  • javadocちゃんと読みましょう!(血の涙)
  • ライブラリの実装もちゃんと読みましょう!
  • このブログで助かる人が増えると幸い
  • この仕様は社内のスーパーエンジニャーが見つけてくれました



0 件のコメント:

コメントを投稿

GA