2016-08-19 2 views
1

요청이 3 초 이상 처리되고 있으면 Tomcat이 내장 된 Spring Boot 애플리케이션에서 연결을 재설정하고 싶습니다. 그러나 내가 할 수있는 방법이 없습니다. 마지막 코드 스 니펫은 다음과 같습니다.스프링 부트 임베디드 Tomcat 연결 제한 시간을 구성하는 방법은 무엇입니까?

@SpringBootApplication 
@ComponentScan(basePackages = {"."}) 
@Controller 
public class ExternalServerApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(ExternalServerApplication.class, args); 
    } 

    @Bean 
    public EmbeddedServletContainerFactory servletContainerFactory() { 
     TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); 

     factory.addConnectorCustomizers(
       connector -> { 
        AbstractProtocol protocol = (AbstractProtocol) connector.getProtocolHandler(); 
        protocol.setConnectionTimeout(1); 
        protocol.setKeepAliveTimeout(1); 
        protocol.setSoTimeout(1); 
        protocol.setPort(8012); 
        protocol.setMaxThreads(10); 
       }); 

     return factory; 
    } 

    @RequestMapping("/request") 
    @ResponseBody 
    public String request() throws InterruptedException { 
     for (int i = 0; i < 50; i++) { 
      Thread.sleep(100); 
     } 
     return "OK"; 
    } 
} 

그러나 작동하지 않습니다.

localhost:8012/requests에 대한 요청은 5 초 동안 지속되고 "OK"를 반환하지만 재설정해야합니다.

아이디어가 있으십니까?

+0

application.properties에 server.connection-timeout = 3000을 지정하려고 했습니까? 편집 : 반면에, 당신은 내 의견을 server.connection - timeout 뭔가 다른 설명서에서 인용 : "이 커넥터가 요청을 연결을 수락 한 후 기다리는 밀리 초 수있는 동안 요청 시간 제한 처리에 대해 씁니다 URI 줄이 표시되어야합니다. ") – patrykos91

+0

해당 스레드를보십시오 : http : // stackoverflow.com/questions/7145131/tomcat-request-timeout 귀하의 문제를 해결할 수있는 또 다른 옵션은 Netflix Zuul을 사용하는 것입니다 :) – patrykos91

답변

0

당신이 찾고있는 것은 클라이언트 시간 초과입니다. setConnectionTimeout, setKeepAliveTimeout, setSoTimeout - 설정 한 매개 변수는 다른 의미를 갖습니다. 아파치 톰캣 문서 당으로

는 아래 이러한 시간 제한의 정의입니다 :

은 ConnectionTimeout - (밀리 초)이 커넥터 것이다 대기 요청 URI 라인에 대한 연결을 허용 한 후 가

을 선물로

KeepAliveTimeout을 - (밀리 초)이 커넥터는 anot에 대한 을 기다립니다 연결

soTimeout을 닫기 전에 그녀의 HTTP 요청 -이 표준 속성과 동일한은 ConnectionTimeout입니다이 일치 귀하의 요구 사항

없음 :

  1. 는 끝을 고려하는 요청을 처리하는 데 걸리는 종료 시간이
  2. 입니다. 요청한 시간이 사전 설정된 값 (3 초, 귀하의 경우)을 초과하면 요청을 실패합니다.

이러한 기능은 http 클라이언트 구현의 일부 여야하며 사용중인 http 클라이언트에만 해당됩니다.

예를 들어이라고 말하면, http 요청을하기 위해 curl을 사용하는 경우 curl의 --max-time 옵션을 사용하여 아래와 같이 지정할 수 있습니다.

curl --max-time 3 http://localhost:8012/requests 
+0

죄송합니다. 그러나 클라이언트의 동작을 제어 할 수 없습니다. – corvax

관련 문제