我正在尝试找出使用超时从GET http请求中检索内容的最佳方法。我花了很多时间试图找出最好的方法,但我有点不确定。
基本上我只想要一个选项,如果在超时之前没有响应,将返回None,否则返回内容。
由于
答案 0 :(得分:1)
所以我想你正试图解决2个问题。如何在配置中定义特定超时,以及如何在超时发生时管理超时。
定义http客户端超时:您需要更新application.conf
以覆盖default configuration of the http client。 e.g:
spray.can {
client {
request-timeout = 20s
}
}
管理超时:当您使用spray client时,您将使用将运行请求的pipeline
。它将是一个看起来像(HttpRequest) => Future[ObjectResponse]
的函数。
结果将是您已定义的对象的Future
,在我的示例中为ObjectResponse
,您可以解决未来问题。如果超时,Future
将变为RequestTimeoutException。然后,您将能够使用recover
处理超时异常。所以你的代码看起来像这样:
def sendRequestFunction(...): Future[ObjectResponse] = {...}
sendRequestFunction(parameters) map (Option) // In case we get an object, we will have a Some(obj)
recover {
case e: RequestTimeoutException => None
}
答案 1 :(得分:0)
您可以尝试这样的事情:
timedOutFuture = after(duration = duration, using = system.scheduler) {
Future.successfull(None)
}
Future.firstCompletedOf(Seq(youHttpRequestFuture, timedOutFuture))
希望有所帮助