当前位置: 首页 > 知识库问答 >
问题:

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

岳鸿畴
2023-03-14

我有一个Spring Boot应用程序,我想实现的是,当我的Rest控制器需要更长的时间来处理请求时,只需发送错误而不继续处理请求。这可能吗?我如何以某种方式实现它,而无需在控制器级别进行修改,而是在应用程序级别进行修改。这是在最新的Spring启动 2.2.6.发布

共有1个答案

暴奕
2023-03-14

您可以通过使用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;
    }

此处请求Hibernate 100 秒,但在延迟结果超时设置 10 秒。所以10秒后,你会得到超时响应...如果您将睡眠时间设置为少于10秒,那么您将获得任务完成响应。

详情请看这个。

 类似资料:
  • 经过长时间的调查,问题似乎是长时间运行的请求超时,并且在NodeJS中再次调用endpoint。没有来自浏览器的新网络请求。我做了一些测试,2分钟后再次调用endpoint。我读到NodeJS中http请求的默认超时时间为2分钟。 https://nodejs.org/docs/latest-v12.x/api/http.html#http_server_timeout 我使用的是NestJS(有

  • 我使用前端Spring云应用程序(微服务)作为Zuul代理()将请求从外部源路由到使用Spring云编写的其他内部微服务(Spring boot) Zuul服务器直接来自示例部分中的应用程序 我在本地运行了这组服务,这一切似乎都工作正常,但如果我在网络上运行它有一些负载,或通过VPN,然后我开始看到Zuul转发错误,我在日志中看到客户端超时。 有没有办法改变Zuul转发的超时时间,这样我就可以从眼

  • 我有一个在Tomcat7上运行的Spring3.0WebMVC应用程序。在应用程序启动时,我启动一个后台线程来加载内存缓存,其中包含来自数据库的记录。该线程从数据库加载所有数据通常需要一个多小时。在同一个应用程序中,我有一个@Controller注释类,它公开了一个REST接口,客户端可以通过该接口从加载的缓存中获取对象。 我们的要求之一是,在数据加载完成之前发出的任何REST请求都将立即向客户端

  • 我们有一个应用程序接口实现在裸骨Scala Akka HTTP中--一对路由前面的大量计算(CPU和内存密集)。没有集群-所有运行在一个强壮的机器上。计算量相当大--一个独立请求可能需要60多秒才能完成。我们并不那么在意速度。没有阻塞IO,只是大量的CPU处理。 当我开始对它进行性能测试时,出现了一个有趣的模式:假设请求A1、A2、...、A10通过。它们会大量使用资源,结果Akka会为溢出的请求

  • 我在heroku服务器上部署了nodejs代码。 我面临H12请求超时问题 这是与pgsql的db连接,它是异步的 这是我如何调用这个数据库 以及立面功能 同样的编码在本地工作,它也在heroku工作。但是突然间我得到了这个问题。有什么帮助吗?

  • 我正在用C++开发双向流gRPC。我想在服务器端设置一个超时限制,如果连接超过一个阈值,就关闭连接。 但是我发现的唯一超时机制是在客户端(https://grpc.io/blog/deadlines/#c)。我找不到任何API可以用于ServerContext(https://grpc.github.io/grpc/cpp/classgrpc_1_1_server_context.html)。有人