10

当使用 spray 的流水线来发出这样的 HTTP 请求时:

val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }

有没有办法为请求指定超时以及为该特定请求重试的次数?

我发现的所有文档都只是在配置中做的参考(即使那样我似乎也无法让它工作)。

谢谢

4

2 回答 2

10

用配置文件

我在 Akka 系统中使用 Spray 1.2.0。在我的 actor 中,我导入了现有的 Akka 系统,这样我就可以使用默认的 Akka 配置文件。

implicit val system = context.system
import context.dispatcher
val pipeline: HttpRequest => Future[HttpResponse] = sendReceive

现在您可以更改中的配置application.conf

spray.can.host-connector {
    max-connections = 10
    max-retries = 3
    max-redirects = 0
    pipelining = off
    idle-timeout = 30 s
    client = ${spray.can.client}
}

在代码中

可以使用 HostConnectorSetup 更改代码中的设置,但您必须定义所有参数。(基于喷雾使用示例。)

val pipeline: Future[SendReceive] =
for (
  Http.HostConnectorInfo(connector, _) <-
  IO(Http) ? Http.HostConnectorSetup("www.spray.io", port = 80, settings = Some(new HostConnectorSettings(maxConnections = 3, maxRetries = 3, maxRedirects = 0, pipelining = false, idleTimeout = 5 seconds, connectionSettings = ClientConnectionSettings(...))))
) yield sendReceive(connector)
于 2014-03-06T13:33:49.587 回答
2

我相信在代码中覆盖默认超时的最简单方法是使用方法的隐式futureTimeout参数sendReceive。该参数的数据类型是akka.util.Timeout。所以,如果你想要一个 120 秒的超时而不是默认的 60 秒,你可以这样做......

implicit val timeout = Timeout(120 seconds)
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }

但是,我没有看到任何允许您的客户端代码以类似方式更改最大重试次数的参数。

于 2014-11-12T01:34:55.547 回答