【问题标题】:Wait for response with timeout in "Dispatch" library等待“调度”库中的超时响应
【发布时间】:2014-03-18 13:25:18
【问题描述】:

我将使用Dispatch 来编写一个简单的HTTP 客户端。我打电话给dispatch.Http 得到一个未来,打电话给未来得到回应

验证请求 = ... val future = Http(request) // 异步调用服务器 val response = future() // 等待服务器的响应

现在我想知道如何等待超时。我希望最后一个 API 调用是:

// 如果在超时时间内没有收到响应,则抛出异常 val 响应 = 未来(超时:长)

有意义吗?

我了解Dispatch 返回scala.concurrent.Future,它不提供API 超时。你会建议我如何实现它?

【问题讨论】:

    标签: scala http concurrency scala-dispatch


    【解决方案1】:

    您可以创建已配置的 Http 客户端:

    val httpApplicationClient = Http.configure( _.setRequestTimeoutInMs(3000) )

    val future = httpApplicationClient(request)

    ...

    【讨论】:

    【解决方案2】:

    首先,你可以使用Await

    import scala.concurrent.Await
    import scala.concurrent.duration._
    
    Await.result(future, 10 seconds) //you can specify timeout here
    

    问题是如果future没有在指定的超时时间内返回,它会抛出异常。

    如果您需要更大的灵活性,这里是第二种方法:

    val futureTimeout = Promise.timeout("Timed out" /* or throw new RuntimeException("timed out") */, 10 seconds)
    Future.firstCompletedOf(Seq(futureResult, futureTimeout)).map {
      case result: SomeType => //do something
      case timedOut: SomeOtherType => //handle timeout
    }
    

    【讨论】:

    猜你喜欢
    • 2019-12-30
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多