복붙노트

[SPRING] Spring 부트 응용 프로그램 - 나머지 API 끝점의 기본 시간 제한 또는 모든 끝점 시간 초과를 제어하는 ​​쉬운 구성

SPRING

Spring 부트 응용 프로그램 - 나머지 API 끝점의 기본 시간 제한 또는 모든 끝점 시간 초과를 제어하는 ​​쉬운 구성

현재 스프링 부트 버전 (1.4.x)을 사용 중이며 API 호출에 대한 기본 시간 제한이 있는지 궁금합니다. 나는 중단 점을 넣음으로써 그것을 테스트했지만, 계속 기다리고 있었고 시간 초과되지 않았다. 또한 주석 또는 yml 설정을 사용하여 모든 스프링 부팅 응용 프로그램에 대한 기본 시간 제한을 구성하려고했습니다.

나는 몇 가지 대안 (여기에 그 중 하나)을 발견했지만 xml bean에서 뭔가 설정하는 것이 최신 스프링 부팅 응용 프로그램에서 유행이 아닌 여분의 비 비즈니스 로직 코드를 추가하는 callable을 사용합니다.

해결법

  1. ==============================

    1.위의 모든 옵션에 동의하고 스프링 부트 응용 프로그램에서 아래 옵션을 시도했습니다. 이제 완벽하게 작동합니다. 아래 코드 샘플은 bean입니다. 이제는 @Autowire RestTemplate이 필요한 곳이면 어디서든 (자바 클래스) 필요합니다.

    위의 모든 옵션에 동의하고 스프링 부트 응용 프로그램에서 아래 옵션을 시도했습니다. 이제 완벽하게 작동합니다. 아래 코드 샘플은 bean입니다. 이제는 @Autowire RestTemplate이 필요한 곳이면 어디서든 (자바 클래스) 필요합니다.

       @Bean
        public RestTemplate restTemplate() {
            RestTemplate restTemplate = new RestTemplate();
            ((SimpleClientHttpRequestFactory) restTemplate.getRequestFactory()).setConnectTimeout(15000);
            ((SimpleClientHttpRequestFactory) restTemplate.getRequestFactory()).setReadTimeout(15000);
    
            return restTemplate;
        }
    
  2. ==============================

    2.application.properties에서 server.connection-timeout = 5000을 시도 할 수 있습니다. 공식 문서에서 :

    application.properties에서 server.connection-timeout = 5000을 시도 할 수 있습니다. 공식 문서에서 :

    최신 정보: 마이크로 서비스 아키텍처 사이에서 통신 할 때 타임 아웃을 처리해야 할 경우에 대비하여 서버 측 대신 클라이언트 측에서 처리하도록 권장합니다. 호출하려는 마이크로 서비스가 과부하 상태가되어 성능이 저하되어 사용자 경험에 큰 영향을 줄 때가 있습니다. 요청을 삭제하는 것보다 일부 대체 데이터를 반환하는 것이 더 나을 때가 있습니다.

    마이크로 서비스 아키텍처와 마이크로 서비스 중 하나가 사용자에게 권장 사항을 제공하는 전자 상거래 웹 사이트가 매우 느리게 있다고 가정 해보십시오. 이 경우 선호되는 솔루션은 고객에게 5xx 오류 페이지를 표시하는 대신 이번 달 상위 10 개 인기 제품이 될 수있는 대체 데이터를 반환하는 것입니다. 또한 후속 요청이 시간 초과로 실패하는 경우 '권장 서비스'에 요청을 보내지 않고 대체 데이터를 즉시 반환하지 않도록 결정할 수 있습니다. 얼마 후에 '추천 서비스'에 다시 요청할 수 있으며 건강이 좋아진 경우 대체 데이터 대신 사용하십시오.

    이를 회로 차단기 패턴이라고하며 Hystrix라고하는 프레임 워크에 이미 구현되어 있습니다. 다음은 심층적으로 설명하는 멋진 기사입니다. http://www.baeldung.com/spring-cloud-netflix-hystrix. Spring Cloud Feign + Spring Cloud Hystrix는 Discovery 서비스 (즉, Spring Cloud Eureka)를 즉시 사용할 수 있다는 점을 고려하여 정말 멋지게 보입니다.

  3. ==============================

    3.이렇게하는 데는 몇 가지 방법이 있습니다.

    이렇게하는 데는 몇 가지 방법이 있습니다.

    1) RestTemplate과 함께 ClientHttpRequestFactory 사용하기 :

    public RestTemplate restTemplate() {
        return new RestTemplate(clientHttpRequestFactory());
    }
    
    private ClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setReadTimeout(timeinMillis);
        factory.setConnectTimeout(timeinMillis);
        return factory;
    }
    

    2) 두 번째 방법은 호출 가능하지만 당신은 이미 그 해결책을 탐구했다.

  4. ==============================

    4.타임 아웃은 Tomcat의 connectionTimeout 속성을 사용하여 설정할 수 있습니다.

    타임 아웃은 Tomcat의 connectionTimeout 속성을 사용하여 설정할 수 있습니다.

    이 답변을 Tomcat 용으로 설정하는 방법을 참조하십시오.

    스프링 부트 임베디드 톰캣에서 maxKeepAliveRequests 설정하기

  5. from https://stackoverflow.com/questions/44274982/spring-boot-application-what-is-default-timeout-for-any-rest-api-endpoint-or-a by cc-by-sa and MIT license