Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring引导异步函数发出AsyncRequestTimeoutException,然后下一个连接失败 问题_Spring_Spring Boot_Spring Mvc_Tomcat - Fatal编程技术网

Spring引导异步函数发出AsyncRequestTimeoutException,然后下一个连接失败 问题

Spring引导异步函数发出AsyncRequestTimeoutException,然后下一个连接失败 问题,spring,spring-boot,spring-mvc,tomcat,Spring,Spring Boot,Spring Mvc,Tomcat,我有一个post请求的处理程序,响应可能需要一段时间,所以我流式处理它。如果响应时间过长,我会得到一个AsyncRequestTimeoutException,我会通过@ControllerAdvice处理程序处理它。问题是,一旦我得到这个错误,下一个连接在尝试连接时就会出错 卷曲: (52)来自服务器的空回复 邮递员: 错误:套接字挂起 在服务器中,当连接进入时,我确实看到以下日志消息 2020-10-13 11:53:26.090 INFO 22536 --- [nio-8080-exec

我有一个post请求的处理程序,响应可能需要一段时间,所以我流式处理它。如果响应时间过长,我会得到一个AsyncRequestTimeoutException,我会通过@ControllerAdvice处理程序处理它。问题是,一旦我得到这个错误,下一个连接在尝试连接时就会出错

卷曲

(52)来自服务器的空回复

邮递员

错误:套接字挂起

在服务器中,当连接进入时,我确实看到以下日志消息

2020-10-13 11:53:26.090  INFO 22536 --- [nio-8080-exec-7] o.a.catalina.connector.CoyoteAdapter     : Encountered a non-recycled response and recycled it forcedly.

org.apache.catalina.connector.CoyoteAdapter$RecycleRequiredException: null
    at org.apache.catalina.connector.CoyoteAdapter.checkRecycled(CoyoteAdapter.java:525) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1364) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:1072) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
查看CoyoteAdapter,这似乎是一条信息性消息,没有迹象表明传入连接将不被处理

问题: 在获得AsyncRequestTimeoutException后,为了让Spring Boot/Tomcat正确处理下一个请求,我需要做什么(注意:在某些情况下,AsyncRequestTimeoutException是预期的,所以我不关心这个问题。我已经将Spring.mvc.async.request-timeout设置为我想要的位置)

系统 我的系统是Mac OSx,但在Docker容器中复制(openjdk:11 jre slim)

Spring Boot:2.3.4.RELEASE(嵌入Tomcat 9.0.38)

示例应用程序 仅使用SpringBootStarterWeb使用SpringIniatlizr创建

要复制的控制器代码
@RestController
@请求映射(“/test”)
公共类主控制器{
私有最终静态记录器log=LoggerFactory.getLogger(MainController.class);
私有最终对象映射程序jsonMapper;
私有最终随机;
@自动连线
公共主控制器(ObjectMapper jsonMapper){
this.jsonMapper=jsonMapper;
this.random=新的random();
}
@PostMapping(value=“streamIt”,products=MediaType.APPLICATION\u JSON\u value)
公共响应性streamIt(@RequestBody final List参数){
log.info(“streamIt以{}请求开始”,param.size());
//流式处理响应,这样,如果存在请求,请求就不会超时
//传入参数列表中有很多元素。
StreamingResponseBody流=输出->{
LocalDateTime start=LocalDateTime.now();
试一试{
//启动阵列
out.写出(“[”);
//标志,指示是否必须为数组分隔添加逗号
布尔值firstItemWrited=false;
for(最终整数请求:param){
如果(!firstItemWrite){
firstItemWrited=true;
}否则{
调试(“写逗号!”);
//在流中写入逗号
写出(,);
}
响应=计算响应(请求);
write(jsonMapper.writeValueAsString(response.getBytes());
out.flush();
调试(“写入值”);
}
}捕获(io异常){
日志错误(“捕获io异常”);
}最后{
out.write(']');
试一试{
out.close();
}捕获(异常ioe){
log.warn(“异常关闭StreamingResponseBody,”+
“error=\“{}\”,ioe.toString());
}
log.info(“streamIt正在退出,花费了{}.”,Duration.between(start,LocalDateTime.now());
}
};
返回新的响应属性(流,HttpStatus.OK);
}
专用响应calculateResponse(整数请求){
//随机获得15到500毫秒之间的“计算”延迟
长睡眠=数学最大值(15L,随机数为500);
debug(“sleep{}ms for request={}”,sleep,request);
试一试{
睡眠;
}捕捉(中断异常e){
//我确实记录了此错误,但不会
//发生在我的实际应用程序中,因为我没有真正进行“睡眠”
错误(“捕获到假装计算响应的中断异常…”);
}
返回新的响应(请求);
}
}
使用Curl命令复制问题
curl--request POST'localhost:8080/test/streamIt'--header'Content Type:application/json'--data raw'[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,
0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29]'
多谢各位