【问题标题】:Timeout Long running requests on server side [duplicate]超时服务器端长时间运行的请求[重复]
【发布时间】:2020-08-27 22:44:39
【问题描述】:
我有一个 Spring Boot 应用程序,我想要实现的是,当我的休息控制器需要更长的时间来处理请求时,然后简单地发送错误而不继续处理请求。这可能吗?如何在不修改控制器级别但在应用程序级别进行修改的方式实现它。这是最新的 Spring boot 2.2.6.RELEASE
【问题讨论】:
标签:
java
spring
spring-boot
rest
microservices
【解决方案1】:
你可以通过使用 DeferredResult 来实现它..
看这个例子:
@GetMapping("/test")
DeferredResult<String> test(){
Long timeOutInMilliSec = 10000L;
String timeOutResp = "Time Out.";
DeferredResult<String> deferredResult = new DeferredResult<>(timeOutInMilliSec,timeOutResp);
CompletableFuture.runAsync(()->{
try {
//Long pooling task;If task is not completed within 100 sec timeout response retrun for this request
TimeUnit.SECONDS.sleep(100);
//set result after completing task to return response to client
deferredResult.setResult("Task Finished");
}catch (Exception ex){
}
});
return deferredResult;
}
这里请求睡眠 100 秒,但在 deferredResult 超时设置
10 秒。所以 10 秒后你会得到Time Out. 响应......如果你设置
sleep 不到 10 秒,您将收到 Task Finished 响应。
Look此了解详情。