使用spray的流水线操作来发出如下的HTTP请求:
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }
有没有办法指定请求的超时时间以及它应该针对该特定请求重试的次数?
我发现的所有文档只引用了在配置中进行的操作(即便如此,我似乎无法使其工作)。
THX
答案 0 :(得分:10)
我在Akka系统中使用Spray 1.2.0。在我的演员里面,我导入现有的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更改代码中的设置,但您必须定义所有参数。 (基于spray usage example。)
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)
答案 1 :(得分:2)
我认为在代码中覆盖默认超时的最简单方法是使用futureTimeout
方法的隐式sendReceive
参数。该参数的数据类型为akka.util.Timeout
。所以,如果你想要120秒的超时而不是默认的60秒,你可以这样做......
implicit val timeout = Timeout(120 seconds)
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }
但是,我没有看到任何允许您的客户端代码以类似方式更改最大重试次数的参数。