首先,您无法通过调整线程配置来控制或限制行为。
每个请求 1 个线程的老派模型在现代容器上无效,尤其是在内部 100% 异步的 Jetty 上。
单个请求可以在该请求的生命周期内使用 1...n 个线程。Jetty 中的线程行为受您的技术选择(例如:操作系统、jvm、网络协议等)和 API 选择的影响,甚至受服务器压力的影响。
除此之外,您所需的解决方案应该专注于限制特定服务器资源端点可以同时使用的请求数量。
这样做的方法是限制可以同时访问服务器资源端点的活动请求的数量。
这是通过跟踪对该特定资源端点的请求数,然后暂停超过配置的最大值的请求,当活动计数低于配置的最大值时恢复暂停的请求,以及超时处于暂停状态的请求来实现的长。
此功能集在 Jetty 中为您提供QoSFilter
。
您可以将 JettyQoSFilter
用于 Jetty 中基于 Jetty ServletContextHandler
(包括WebAppContext
)的任何内容。
见:https ://www.eclipse.org/jetty/documentation/jetty-9/index.html#qos-filter
FilterHolder qosConfig = servletContextHandler.addFilter(QoSFilter.class,
"/api/backend/*",
EnumSet.of(DispatcherType.REQUEST));
qosConfig.setInitParameter("maxRequests", "10");
qosConfig.setInitParameter("waitMs", "50");
qosConfig.setInitParameter("suspendMs", "-1");