Postgresql Akka HTTP请求超时问题

Postgresql Akka HTTP请求超时问题,postgresql,scala,akka-http,Postgresql,Scala,Akka Http,我们有一个用例根据给定的时间间隔生成数据。通过一个请求,我们将从不同的组织获取相同的数据 在生成数据时,Postgres数据库(即70-80多个数据库)上会触发大量查询,在处理数据后,我们会返回数据 一切都是使用Scala Futures实现的。但它给了我时间,所以我把它增加到了5分钟 post { pathPrefix("reporting") { path("data") { withRequestTi

我们有一个用例根据给定的时间间隔生成数据。通过一个请求,我们将从不同的组织获取相同的数据

在生成数据时,Postgres数据库(即70-80多个数据库)上会触发大量查询,在处理数据后,我们会返回数据

一切都是使用Scala Futures实现的。但它给了我时间,所以我把它增加到了5分钟

 post {
      pathPrefix("reporting") {
        path("data") {
          withRequestTimeout(300.seconds) {
           //code
     }
 } 

Response: [akka.actor.ActorSystemImpl(inbox-reporting)] Request timeout encountered for request [POST /reporting/data Strict(123 bytes)]
即使在5分钟后,它也会在请求后2-3分钟内给出信息请求超时,然后就不会返回任何数据。300 time也不是一个可扩展的解决方案,因为生产中将有更多的数据

如何在同一日期处理如此大规模的处理而不造成时间延迟

任何帮助都将不胜感激。
谢谢

如果请求超时,则代码花费的时间太长,无法生成答案,因此问题在于数据库代码,而不是此HTTP代码

您需要在代码中加入更详细的计时,以了解为什么处理请求需要如此长的时间。这将帮助您了解这是一个简单的过载问题,还是一个特定请求类的更具体问题

我使用这样的代码来包装代码的不同部分:

private var timeDepth = 0

def time[T](op: String)(code: => T)(implicit logger: Logger): T = {
  timeDepth += 1
  val pad = "\t"*timeDepth
  logger.info("{}Begin {}", pad, op)

  val start = System.currentTimeMillis()
  val res = code
  val stop = System.currentTimeMillis()

  logger.info("{}{} took {}ms", pad, op, stop - start)
  timeDepth -= 1
  res
}
用法:

  val result =
    time("Read from database") {
      //code
    }

如果问题是过载,那么您需要在更高的上游投入一些速率调整,而不是在部分满足请求上浪费时间。

是的,我知道代码需要花费很多时间,因为它们是大量被触发的查询,但肯定会花费很多时间。如何在不超时的情况下处理此类场景?谢谢,我试试这个。