Scala Spray.can.server.request-timeout属性无效

Scala Spray.can.server.request-timeout属性无效,scala,spray,Scala,Spray,在mysrc/main/resources/application.conf中,我包括: spray.can.server { request-timeout = 1s } 为了测试这一点,在为我的请求提供服务的将来,我放置了一个线程。sleep(10000) 当我发出一个请求时,服务器等待10秒,并没有向客户端发送超时提示 我没有覆盖超时处理程序 为什么我的客户端(chrome和curl)没有收到超时?我认为请求超时是针对http客户端的,如果在该值之前没有返回响应,客户端将从spray

在my
src/main/resources/application.conf中,我包括:

spray.can.server {
  request-timeout = 1s
}
为了测试这一点,在为我的请求提供服务的将来,我放置了一个
线程。sleep(10000)

当我发出一个请求时,服务器等待10秒,并没有向客户端发送超时提示

我没有覆盖超时处理程序


为什么我的客户端(chrome和curl)没有收到超时?

我认为请求超时是针对http客户端的,如果在该值之前没有返回响应,客户端将从spray获得超时,请参阅

例如,在我的web浏览器中,我可以看到以下消息:

Ooops! The server was not able to produce a timely response to your request.
Please try again in a short while!

如果超时时间足够长,浏览器将一直等待,直到返回响应。

配置看起来正确,因此喷洒请求超时应该有效。它不工作的一个常见原因是应用程序没有使用您的config
application.conf

忽略config的原因可能是它位于错误的位置,没有包含在类路径中,或者没有包含在打包的JAR中

要进行故障排除,请首先检查默认喷洒超时是否正常工作。现在是20秒。让你的代码休眠30秒,看看你是否触发了超时

通过检查最终配置值中的内容。在您的配置文件中设置:

akka {
  # Log the complete configuration at INFO level when the actor system is started.
  # This is useful when you are uncertain of what configuration is used.
  log-config-on-start = on
}

最后,请记住其他超时,如
timeout timeout=2 s

没有向客户端发送超时。Spray将触发超时处理程序,该处理程序将返回到客户端,您可以在此处找到代码:Spray can/src/main/scala/Spray/can/server/OpenRequest.scala**def timeoutResponse(请求:HttpRequest):HttpResponse=HttpResponse(status=500,entity=“oops!服务器无法及时响应您的请求。\n”…“请稍后再试!”)**您是否检查了配置是否正在使用?根据文档,默认为20秒()。将您的设置为30秒,然后查看是否触发了它。另外,还应考虑到
超时=2 s
。它应该正常工作,因此我怀疑您的
应用程序.config因某种原因未被读取。也可以尝试使用以下选项打印配置:`akka'{#在启动actor系统时,在信息级别记录完整的配置。#当您不确定使用了什么配置时,这很有用。Log config on start=on}`。From:如果问题是没有读取配置,您需要查看类路径和/或打包jar插件(如果适用)。我的intellij运行配置中有一个不同的application.conf。这是一个典型的错误。
akka {
  # Log the complete configuration at INFO level when the actor system is started.
  # This is useful when you are uncertain of what configuration is used.
  log-config-on-start = on
}