重试与Play的AhcWSClient

时间:2016-05-03 18:13:37

标签: scala playframework

我使用Play AhcWSClient发出HTTP请求(我没有使用Play框架的其余部分):

implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
val wsClient = AhcWSClient()
wsClient
  .url(s"http://somerandomurl.com/somethingsomething")
  .get()
  .map { wsResponse =>
    if (!(200 to 299).contains(wsResponse.status)) {
      sys.error(s"Received unexpected status ${wsResponse.status} : ${wsResponse.body}")
    }
    println(s"OK, received ${wsResponse.body}")
  }(system.dispatcher)
}

如果失败,我如何指示WSClient重试请求?

查看文档时,seems to be possible使用AsyncHttpClientConfig maxNumberOfRedirects参数(指的是"如果请求失败则重试请求的最大次数#34;)但是如何?

更新:因此,显然,在创建AhcWSClient时,我们会获得five retries by default,并且可以使用不同的AhcWSClientConfig指定我们自己的maxRequestRetry 。但是当我发出返回502状态代码的请求时,我看不到发生多次尝试......我应该将其视为"失败的请求"?

1 个答案:

答案 0 :(得分:-1)

通常客户端应该只重试idempotent的方法:

  

方法GET,HEAD,PUT和DELETE共享此属性。此外,方法OPTIONS和TRACE不应该有副作用,因此本质上是幂等的。