HttpClientCustomizer

spring-cloud-gateway の HttpClientCustomizer インターフェースを使用すると、ゲートウェイで使用される HTTP クライアントをカスタマイズできます。このインターフェースには、HttpClient を引数として受け取り、そのカスタマイズされたバージョンを返す、customize という単一のメソッドが用意されています。

このインターフェースは、タイムアウトの設定、カスタムヘッダーの追加、特定の機能の有効化など、HTTP クライアントの特定の設定や動作を構成する必要があるシナリオで役立ちます。このインターフェースを実装することで、特定の要件を満たすカスタム実装を提供できます。

HttpClientCustomizer インターフェースの使用方法の例を次に示します。

MyHttpClientCustomizer.java
import org.springframework.cloud.gateway.config.HttpClientCustomizer;
import reactor.netty.http.client.HttpClient;

public class MyHttpClientCustomizer implements HttpClientCustomizer {

    @Override
    public HttpClient customize(HttpClient httpClient) {
        // Customize the HTTP client here
        return httpClient.tcpConfiguration(tcpClient -> {
            // Set the connect timeout to 5 seconds
            tcpClient.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000);
            // Set the read timeout to 10 seconds
            tcpClient.option(ChannelOption.SO_TIMEOUT, 10000);
            return tcpClient;
        });
    }
}

この例では、MyHttpClientCustomizer クラスは HttpClientCustomizer インターフェースを実装し、カスタマイズメソッドをオーバーライドします。このメソッド内で、接続タイムアウトを 5 秒、読み取りタイムアウトを 10 秒に設定して、HTTP クライアントがカスタマイズされます。

このカスタマイザーを使用するには、Spring Cloud Gateway 構成に登録する必要があります。

GatewayConfiguration.java
@Configuration
public class GatewayConfiguration {

    @Bean
    public HttpClientCustomizer myHttpClientCustomizer() {
        return new MyHttpClientCustomizer();
    }
}

カスタマイザーを Bean として登録すると、ゲートウェイで使用される HTTP クライアントに自動的に適用されます。