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

如何处理长API请求

段干飞翮
2023-03-14

我有一个在数据库上运行查询的API。由于查询执行时间可能很长,比如3分钟到10分钟,我的负载平衡器返回“上游请求超时”,但我可以看到查询已提交到数据源,但对最终用户来说,它显示了错误的消息。如何应对这种情况?

我的职能

@PostMapping("/run/{QueryId}")
public void runQuery(@PathVariable String QueryId) {
     // This method takes long time
     querySchedulerService.runQuery(QueryId);
} 

共有1个答案

袁鸿达
2023-03-14

控制器:

class SomeController{
 @PostMapping("/run/{QueryId}")
    public ResponseEntity<Void> runQuery(@PathVariable String QueryId) {
         // This method takes long time
         querySchedulerService.runQuery(QueryId);
         return new ResponseEntity<>(HTTP_STATUS.ACCEPTED);
    } 
}

服务:

@Service
class QuerySchedulerService{

    @Async
    public void runQuery(Query query){
    // Do somthing
    }
}

通过在主应用程序类中添加@EnableAsync注释,可以使用@Async注释

每次调用runQuery时,它都将在新线程中运行。

@EnableAsync
class Application{

}

 类似资料:
  • 我们使用RESTEasy编写了Web API。我们希望以Google Batch请求处理的方式为Batch请求处理提供支持。 以下是目前使用的方法, 我们有一个过滤器,它接受传入的多部分请求。然后,此过滤器创建多个模拟请求和响应对象,然后调用链。doFilter使用这些模拟请求。 MockHttpServletResponse类返回一个虚拟的OutputStream,它将通过TearayoutPu

  • 我使用的API根据成功/失败有不同的json响应。它们不是HTTP错误,而是json主体中的代码。 我添加了一个,但感觉我只是把事情放在一起,忽略了问题。这是一种可接受的或“pythonic”的方式来处理类似的不同响应吗?另外,如果存在状态,我是否正确地使用来跳过该行?

  • 我正在使用OkHttpClient向网站的网页url发送请求,并通过以下方法存储它提供的cookie,我仅从stackoverflow获得该方法。 有必要存储cookie,否则网站会将请求重定向到超时页面。 然后,我看到页面的html来检查我是否到达了正确的网址。 现在,我以类似于网址“www.example.com/loginPage”的方式制作另一个请求变量,并尝试查看html,但它将我重定向

  • 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求。让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听)开始: server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_nam

  • 前言 Networkclient的poll函数: 其实是不断去查询请求是否超时 对 因为长期没有收到请求,设置状态为disconnect,然后希望重新建立连接

  • 1)手机端/电脑端:当有新人申请时,系统通知会推送申请,选择同意或拒绝。 2)企业管理-首页-处理新人申请或人员管理-人事管理-新人申请