硬限制连接Spring Boot

时间:2016-08-24 13:02:41

标签: spring tomcat spring-boot jetty undertow

我正在开发一个用Spring Boot编写的简单微服务。此服务将充当另一个具有硬并发连接限制的资源的代理,并且请求需要一段时间才能处理。

我想对允许使用我的微服务的并发连接施加硬限制,并拒绝使用503或tcp / ip级别的任何连接。我试图研究可以为Jetty / Tomcat / Undertow制作的不同配置,但还没有找到完全令人信服的东西。

我发现了一些调节线程池的设置:

  • server.tomcat.max-threads = 0#最大工作线程数。
  • server.undertow.io-threads =#为worker创建的I / O线程数。
  • server.undertow.worker-threads =#工作线程数。
  • server.jetty.acceptors =#要使用的接受者线程数。
  • server.jetty.selectors =#要使用的选择器线程数。

但如果理解正确,这些都是配置线程池大小,只会导致连接在某个级别排队。

这看起来非常有趣,但尚未合并,目标是Spring Boot 1.5,https://github.com/spring-projects/spring-boot/pull/6571

我现在使用设置运气不好吗?我当然可以实现一个过滤器,但宁愿在较早的水平上阻止它而不必重新发明轮子。我想在前面使用apache或其他东西也是一种选择,但仍然感觉有点矫枉过正。

1 个答案:

答案 0 :(得分:1)

尝试查看EmbeddedServletContainerCustomizer

this gist可以给你并想出如何做到这一点。

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