Scala Play 2.7在75秒后重新执行动作的身体

问题描述 投票:0回答:1

采取以下措施:

Action.async {
    implicit request: Request[AnyContent] => 
      logger.warn(s"CALL: $request")
      Future {
        blocking {
          Thread.sleep(120000)
          logger.warn("FINISHED")
          Ok("{}")
        }
      }
  }

我希望在t = 0时看到CALL,在t = 120s时看到FINISHED。但是会发生以下情况:

t=0s: CALL
t=75s: CALL
t=120s: FINISHED
t=195s: FINISHED

然后页面呈现“连接已重置”。

发生了什么事??

playframework
1个回答
1
投票
事实证明,默认情况下,Play使用带host connection pool的Akka.Http。这意味着当第一个请求超时(play.server.http.idleTimeout默认为75s)时,它将自动重新发送请求。specified仅重试幂等请求,这就是我弄错的地方:我的请求使用GET,但是在服务器端触发的操作不是幂等的。因此,我应该改用POST。Source
© www.soinside.com 2019 - 2024. All rights reserved.