Spray / Scala - 根据特定请求设置超时

时间:2015-01-14 18:34:29

标签: scala timeout pipeline spray

我目前使用喷涂管道设置REST调用。如果我在x秒内没有得到响应,我希望它超时,但仅限于该特定呼叫。在发出喷涂客户端管道请求时,是否有一种指定特定于该特定调用的超时的好方法?

1 个答案:

答案 0 :(得分:1)

据我所知,从喷涂客户端1.3.1开始,无法在创建管道后自定义​​管道。 但是,您可以为不同类型的请求创建自定义管道。

值得一提的是,下面定义的超时是ask()调用的超时,而不是网络操作的超时,但我想这就是您的描述所需要的。

我发现以下文章非常有助于更好地了解库在幕后工作的方式:http://kamon.io/teamblog/2014/11/02/understanding-spray-client-timeout-settings/

免责声明:我还没有真正试过这个,但我想它应该可行:

val timeout1 = Timeout(5 minutes)
val timeout2 = Timeout(1 minutes)

val pipeline1: HttpRequest => Future[HttpResponse] = sendReceive(implicitly[ActorRefFactory],
        implicitly[ExecutionContext], timeout1)

val pipeline2: HttpRequest => Future[HttpResponse] = sendReceive(implicitly[ActorRefFactory],
        implicitly[ExecutionContext], timeout2)

然后你明显地为每个请求使用适当的管道