2016-08-24 3 views
0

스프링 부트로 작성된 간단한 마이크로 서비스로 작업하고 있습니다. 이 서비스는 동시 연결 제한이 엄격한 다른 리소스를 향한 프록시 역할을하며 요청은 처리하는 데 시간이 걸립니다.하드 한도 연결 스프링 부트

필자는 마이크로 서비스에 허용되는 동시 연결에 대해 엄격한 제한을 부과하고 503 또는 tcp/ip 수준의 포트를 거부하고 싶습니다. 나는 Jetty/Tomcat/Undertow를 위해 만들어 질 수있는 다른 설정들을 조사하려고 노력했지만, 아직 확신 할 수없는 것을 알아 냈다.

  • server.tomcat.max - 스레드 = 작업자 스레드 0 # 최대 금액 :

    은 좀 스레드 풀을 조절하는 설정을 발견했다.
  • server.undertow.io-threads = # 작업자를 위해 생성 할 I/O 스레드 수.
  • server.undertow.worker-threads = # 작업 스레드 수.
  • server.jetty.acceptors = # 사용할 수락 자 스레드 수.
  • server.jetty.selectors = # 사용할 선택기 스레드 수입니다.

올바르게 이해한다면 이들은 모두 스레드 풀 크기를 구성하고 있으며 일부 수준에서 대기중인 연결을 초래할 것입니다. 현재의 설정을 사용하여 https://github.com/spring-projects/spring-boot/pull/6571

오전 나는 운,

이 정말 흥미로운 것 같다, 그러나 이것은 아직 통합되지 않았으며 봄 부팅 1.5 대상인가? 물론 필자는 필터를 구현할 수는 있지만 이전 레벨에서는 차단하고 휠을 재발 명할 필요는 없습니다. 나는 아파치 나 다른 것을 앞에 사용하는 것도 옵션이지만, 여전히 잔인한 느낌이다.

+0

부두에는 이러한 종류의 연결 제한에 대한'QoSFilter'와'DoSFilter'가 있습니다 (다가오는 Jetty 9.4.x에는 더 많은 옵션이 있습니다). –

+0

DoSFilter를 살펴 봤지만 병렬/진행중인 요청 수를 실제로 제한하는 매개 변수를 찾을 수 없습니다. 내가 놓친 게 있니? – user1293081

답변

1

는 어떻게 작업을 수행하는과 아이디어를 줄 수 EmbeddedServletContainerCustomizer

this gist 살펴보십시오.

TomcatEmbeddedServletContainerFactory factory = ...; 
    factory.addConnectorCustomizers(connector -> 
      ((AbstractProtocol) connector.getProtocolHandler()).setMaxConnections(10000)); 
+0

감사! 시간이 되 자마자 시험해 보지만 유망 해 보인다. – user1293081