作者:yzh148448 | 来源:互联网 | 2022-12-01 16:30
1> Brian Clozel..:
这不是我在本地设置中看到的.将控制器更改为以下内容会将"onNext 1"打印到"onNext 1000":
AtomicLong count = new AtomicLong(0);
@GetMapping("/delayed")
public Mono delayed() {
return Mono.just("result").delayElement(Duration.ofSeconds(30))
.doOnNext(s -> {
logger.info("onNext " + count.incrementAndGet());
});
}
在你的一条评论中,你提到的CommonsRequestLoggingFilter
是Servlet特有的.这告诉我你没有运行Spring WebFlux应用程序,而是实际上是一个Spring MVC应用程序.如果你正在运行Spring Boot并且你在类路径上有Spring MVC,Spring Boot将为你配置一个Spring MVC应用程序.
默认情况下,Spring MVC将使用a SimpleAsyncTaskExecutor
来为这些请求调度异步处理(Spring MVC支持反应式返回类型,但会将它们视为@Async
请求,异步但不是非阻塞).我认为SimpleAsyncTaskExecutor
默认情况下没有并发限制.也许你已经在你的应用程序中配置了一个将并发限制为256的任务执行器?
我试图用Spring MVC应用程序重现它,仍然在日志中处理了999个请求和一个已解决的异常:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.context.request.async.AsyncRequestTimeoutException]