spring - 硬限制连接 Spring Boot

标签 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 或其他东西也是一种选择,但这仍然感觉有点矫枉过正。

最佳答案

试着看看EmbeddedServletContainerCustomizer

this gist可以给你和想法如何做到这一点。

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

关于spring - 硬限制连接 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39124113/

相关文章:

java - 良好实践 - Spring 验证 - 前端与后端

tomcat启动问题

java - Tomcat启动性能: How to prevent waiting until all webapps are deployed?

java - 如何在 spring-boot 和 postgresql 中使用 postgis 类型地理?

java - 在注释中注入(inject) Spring 属性列表

java - 将动态值注入(inject) bean 的 constructor-arg 标记

logging - Spring Boot : How to disable startup log message "Starting Application on mbp with PID 99446"

java - 我想使用 thymeleaf 包含到 html 文件中

java - 从 main 方法访问带注释的类成员

java - 异常处理程序未返回正确的响应