Spring Cloud Gateway의 HttpClientCustomizer 인터페이스는 gateway에서 사용하는 HTTP 클라이언트를 커스터마이징 할 수 있게 해 준다
Spring Cloud Gateway에서는 내부적으로 reactor.netty.http.client.HttpClient를 사용하여 백엔드 서비스로 요청을 보낸다.
HttpClient를 커스터마이징하고 싶을 때 사용하는 것이 바로 HttpClientCustomizer 인터페이스이다.
하나의 메서드인 customize를 제공하며, 이 메서드는 HttpClient 객체를 매개변수로 받아 수정된 버전을 반환한다.
타임아웃 설정, 커스텀 헤더 추가, 특정 기능 활성화 등 HTTP 클라이언트에 대해 특별한 설정이나 동작을 구성해야 하는 상황에서 유용하다
인터페이스를 구현함으로써, 여러분의 요구 사항에 맞는 맞춤 구현체를 제공할 수 있다
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;
});
}
}
@Configuration
public class GatewayConfiguration {
@Bean
public HttpClientCustomizer myHttpClientCustomizer() {
return new MyHttpClientCustomizer();
}
}
Configuration
Spring Cloud Gateway의 라우팅 설정은 여러 개의 RouteDefinitionLocator 인스턴스에 의해 동작한다.
-> 라우팅 설정(어떤 경로로 요청을 보낼지 등)을 정의하는 주체가 RouteDefinitionLocator
RouteDefinitionLocator 인터페이스 정의 예시
public interface RouteDefinitionLocator {
Flux<RouteDefinition> getRouteDefinitions();
}
기본적으로 PropertiesRouteDefinitionLocator는 Spring Boot의 @ConfigurationProperties 기능을 통해 설정값을 읽어 들인다.
-> application.yml에 정의한 라우팅 정보가 PropertiesRouteDefinitionLocator 클래스를 통해 적용된다.