jcl*_*ent 5 java spring-boot undertow
我的主要目标是设置 Undertow 的最大并发请求连接限制。
我尝试通过属性进行配置来设置它。但这不起作用。
我研究了如何限制每个请求的最大连接数,并发现以下内容:
为了限制 undertow 中的连接,有必要实现 RequestLimitHandler 和 RequestLimit。
“Request Limiting Handler 限制并发请求数量的处理程序。如果数量超过限制,请求将排队。如果队列已满,则请求将被拒绝。”
http://undertow.io/undertow-docs/undertow-docs-1.2.0/#built-in-handlers
Run Code Online (Sandbox Code Playgroud)
我已经尝试了下一个实现,但此处理程序不会限制请求,因为它不会返回错误 503 响应,而且我无法与 MVC 方法绑定。
1. Test case:
@Bean
public UndertowServletWebServerFactory myUndertowServletWebServerFactory() {
final UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
final HandlerWrapper handlerWrapperLimit = new HandlerWrapper() {
@Override
public HttpHandler wrap(final HttpHandler handler) {
final int maximumConcurrentRequests = 1;
final int queueSize = 100;
final RequestLimit requestLimit = new RequestLimit(maximumConcurrentRequests,
queueSize);
final RequestLimitingHandler limitHandler = new RequestLimitingHandler(requestLimit,
new ResponseCodeHandler(
StatusCodes.OK));
return limitHandler;
}
};
factory.addDeploymentInfoCustomizers(info -> info.addInitialHandlerChainWrapper(handlerWrapperLimit));
return factory;
}
2. Test case:
@Bean
public UndertowServletWebServerFactory myUndertowServletWebServerFactory() {
final UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
final HandlerWrapper handlerWrapperLimit = new HandlerWrapper() {
@Override
public HttpHandler wrap(final HttpHandler handler) {
final int maximumConcurrentRequests = 1;
final int queueSize = 100;
final RequestLimit requestLimit = new RequestLimit(maximumConcurrentRequests,
queueSize);
requestLimit.setFailureHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
final ResponseCodeHandler responseCodeHandler = new ResponseCodeHandler(
StatusCodes.SERVICE_UNAVAILABLE);
exchange.dispatch(responseCodeHandler);
}
});
final RequestLimitingHandler limitHandler = new RequestLimitingHandler(requestLimit,
new HttpHandler() { //Default Handler
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.dispatch(new ResponseCodeHandler(StatusCodes.OK));
}
});
return limitHandler;
}
};
factory.addDeploymentInfoCustomizers(info -> info.addInitialHandlerChainWrapper(handlerWrapperLimit));
return factory;
}
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题。
| 归档时间: |
|
| 查看次数: |
2489 次 |
| 最近记录: |