超时服务器端长时间运行的请求[重复]

Posted

技术标签:

【中文标题】超时服务器端长时间运行的请求[重复]【英文标题】:Timeout Long running requests on server side [duplicate] 【发布时间】:2020-08-27 22:44:39 【问题描述】:

我有一个 Spring Boot 应用程序,我想要实现的是,当我的休息控制器需要更长的时间来处理请求时,然后简单地发送错误而不继续处理请求。这可能吗?如何在不修改控制器级别但在应用程序级别进行修改的方式实现它。这是最新的 Spring boot 2.2.6.RELEASE

【问题讨论】:

Webflux 还是 MVC? ***.com/questions/34852236/… 我正在使用 mvc。所以servlet 【参考方案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此了解详情。

【讨论】:

以上是关于超时服务器端长时间运行的请求[重复]的主要内容,如果未能解决你的问题,请参考以下文章

实现对长时间运行的服务器端方法的客户端调用的正确方法

xshell避免长时间未操作断开连接

如何使 WebSphere Application Server 上长时间运行的 Web 请求超时? [复制]

常见网络知识面试题

在 iOS 中实现长时间运行的后台任务

95-36-210-ChannelHandler-系统Channel-TimeoutHandler1