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

时间:2015-09-01 04:39:02

标签: scala spray

在我的src/main/resources/application.conf我包括:

spray.can.server {
  request-timeout = 1s
}

为了测试这一点,在为我的请求提供服务的Future中,我放了一个Thread.sleep(10000)

当我发出请求时,服务器等待10秒钟并且没有提示发送到客户端的超时。

我没有覆盖超时处理程序。

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

2 个答案:

答案 0 :(得分:3)

配置看起来正确,因此Spray请求超时应该正常。它无法正常工作的一个常见原因是应用程序未使用您的配置application.conf

配置被忽略的原因可能是它位于错误的位置,未包含在您的类路径中,或者未包含在您打包的JAR中。

要排除故障,请先检查默认的喷涂超时是否正常。到default它的20秒。让你的代码休眠30秒,看看你是否触发了超时。

printing it检查最终配置值中的内容。在你的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
}

最后,请记住timeout-timeout = 2 s等其他超时。

答案 1 :(得分:0)

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

(317, 504, 3)

例如,在我的网络浏览器中,我可以收到以下消息:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %name_degree;
my %name_industry;
while(<DATA>){
    chomp;
    if(/^([A-Za-z]+).*?(graduation)/){
        $name_degree{$1}++;
    }
    if(/^([A-Za-z]+).*?(IT industry)/){
        $name_industry{$1}++;
    }
}
foreach (keys %name_degree){
    print "$_ word has $name_degree{$_} Graduations\n"; 
}
foreach (keys %name_industry){
    print "$_ word has $name_industry{$_} IT industry\n";   
}
__DATA__
John completed his graduation 
John is working for an IT industry
Thomas completed his graduation
John completed his graduation
Thomas is working for an IT industry
Thomas is working for an IT industry

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