인프런 커뮤니티 질문&답변

전동혁님의 프로필 이미지
전동혁

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Gateway - Global Filter

spring cloud gateway mvc 모델에서 route별 timeout 설정

작성

·

35

0

안녕하세요 선생님. 질문이 있어 남깁니다.

spring cloud gateway mvc모델에서 route별 httpclient의 readtimeout, connectiontimeout을 설정하는 방법이 있나요?
reactive한 모델에서는 metadata를 이용하여 설정하는 것 같은데, documents를 아무리 뒤져도 mvc모델에서 전역적으로 타임아웃 설정하는 법만 있고, route별 설정하는 법이 없네요..

 

어떻게 설정해야할까요?

답변 1

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

spring cloud gateway 전체에 대한 response-timeout 또는 conenct-timeout 설정 이외에 Route별로 설정을 하실려면 아래와 같은 방법이 가능할 것 같습니다.

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: http://user-service:8080
          filters:
            - name: CustomTimeoutFilter
              args:
                timeout: 3000 # Timeout in milliseconds
@Component
public class CustomTimeoutFilter extends AbstractGatewayFilterFactory<CustomTimeoutFilter.Config> {

    public CustomTimeoutFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            // Start the chain and enforce timeout
            return chain.filter(exchange)
                    .timeout(Duration.ofMillis(config.getTimeout()))
                    .onErrorResume(throwable -> {
                        // Handle timeout errors
                        exchange.getResponse().setStatusCode(HttpStatus.GATEWAY_TIMEOUT);
                        DataBufferUtils.release(exchange.getResponse().bufferFactory().allocateBuffer());
                        return exchange.getResponse().setComplete();
                    });
        };
    }

    public static class Config {
        private long timeout;

        public long getTimeout() {
            return timeout;
        }

        public void setTimeout(long timeout) {
            this.timeout = timeout;
        }
    }
}

위와 같은 예시 코드로 작업해 보실 수 있을 것 같습니다.

감사합니다.

전동혁님의 프로필 이미지
전동혁

작성한 질문수

질문하기