使用喷雾和期货检索http响应并超时

时间:2016-05-18 22:51:53

标签: scala http httprequest spray

我正在尝试找出使用超时从GET http请求中检索内容的最佳方法。我花了很多时间试图找出最好的方法,但我有点不确定。

基本上我只想要一个选项,如果在超时之前没有响应,将返回None,否则返回内容。

由于

2 个答案:

答案 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))

希望有所帮助