gpt4 book ai didi

scala - 在 scala Spray 框架中,如何创建多个具有不同配置(例如,超时、重试)的 http 客户端

转载 作者:行者123 更新时间:2023-12-01 05:11:47 34 4
gpt4 key购买 nike

我有两个spray http客户端,如下:

  val pipelineFoo: HttpRequest => Future[Foo] = (
sendReceive
~> unmarshal[Message.Foo])

val pipelineBar: HttpRequest => Future[Bar] = (
sendReceive
~> unmarshal[Message.Bar])

def execFoo(h: String, p: Int): Future[Foo] = {
val uri = Uri.from(scheme = "http", host = h, port = p, path = "/foo")
pipelineFoo(Get(uri))
}

def execBar(h: String, p: Int): Future[Bar] = {
val uri = Uri.from(scheme = "http", host = h, port = p, path = "/bar")
pipelineBar(Get(uri))
}

我想让 foo 请求重试几次,超时时间很长,并且 bar 请求不重试并且超时时间很短(比如 1 秒)。我怎样才能在喷雾中实现这一点(抱歉,如果这是在文档中的某个地方,但我一直无法找到它——我只找到了一些关于全局设置此类配置参数的文档)。

最佳答案

这应该不会太难。 sendReceive 实际上可以带更多的参数。例如,以下是其中一种选择的签名:

def sendReceive(transport: ActorRef)(implicit ec: ExecutionContext, futureTimeout: Timeout): SendReceive

我自己将它用于类似的场景,当我点击外部服务而不是点击我们的内部服务时,我必须有更多的重试次数和更长的超时时间。

这是我使用的管道示例:
lazy val pipeline: HttpRequest => Future[HttpResponse] = (
addCredentials(BasicHttpCredentials(clientConnection.credentials._1, clientConnection.credentials._2))
~> addHeader(`User-Agent`(ProductVersion("<YOUR NAME HERE>", "<YOUR VERSION HERE>", "http://github.com/<WHEREVER YOUR PROJECT IS>"), ProductVersion("spray-client", "1.3.1", "http://spray.io")))
~> logRequest(log)
~> sendReceive(clientConnection.connection)(clientConnection.context, clientConnection.timeout)
~> decode(Deflate)
~> decode(Gzip)
)

clientConnection 没什么特别的。这只是我制作的一个案例类,可以通过代码手动填写,或者在 application.conf 中进行一些配置

关于scala - 在 scala Spray 框架中,如何创建多个具有不同配置(例如,超时、重试)的 http 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251012/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com