首页 > 解决方案 > 30 秒后在前端超时(使用的技术 -Scala、akka、nginx 和 react/node js)

问题描述

我的申请流程是:

nginx = > react app = > nginx => akka http 

在 30 秒内执行时,所有其他功能都可以正常工作。

我们创建了一个新的 API 来导出 csv 文件中的患者详细信息,这个导出请求需要 2.5 分钟才能执行。我们在这个应用程序中使用了以下技术:Scala、akka、nginx 和 react/node js 作为前端。

当我点击导出链接时,请求被执行并能够在日志中看到。但在浏览器控制台 GET /export/request 503(服务不可用)上出现错误 30 秒后,promise 块中出现 java 脚本错误。

如果我们尝试直接从 curl 命令访问 API(因为我们一直在使用加载患者数据),那么我们也可以从 TEST 站点导出数据(1.8 分钟)。后端没有超时或 503 问题(akka http)

我观察到所有 API 都会出现这个问题,如果它们的执行时间超过 30 秒,那么我们将在控制台上收到 503 错误。我们在添加 30 秒等待语句 [Thread.sleep(30sec)] 后测试观察到这一点

应用的解决方案:

  1. 在参考 akka 文档后,我将理想超时设置增加到 240 秒。

应用程序.conf:

http {
    server {
      request-timeout: 240s
       idle-timeout: 240s
    }
  } 

它适用于我的本地/开发环境。/export/ 请求在 2 分钟内执行。

在 TEST 环境中部署此更改后。问题仍然存在,30 秒后出现 503。在测试环境中。应用程序正在使用 docker env 运行。

请求流/应用程序设置:

内部 AWS 负载均衡器 => EC2 实例 => nginx 代理(清单:80)=> 前端应用程序(react js 应用程序)=> 后端(scala 和 akka)

  1. 将 nginx 从 1.9 升级到 1.21

  2. 经过详细分析,只有当请求来自前端代理(Nginx-Docker 映像)时才会出现此问题:在 nginx/default.conf 中微调所有超时参数,但仍然无法正常工作。

     location / {
         proxy_set_header Host $http_host;
         proxy_read_timeout 100;
         proxy_connect_timeout 100;
         proxy_send_timeout 100;
     }
    
  3. 负载平衡器的时间从 60 秒增加到 700 秒。

以上所有解决方案均无效,下载 CSV 时仍出现 503 错误。

请帮我。

标签: node.jsdockernginxtimeoutakka

解决方案


推荐阅读