【问题标题】:Spray client Request timeout喷客户端请求超时
【发布时间】:2020-03-05 16:34:40
【问题描述】:

我是 scala 的新手。我正在尝试使 api 请求超时。我正在使用喷雾来发出 API 请求。我有喷雾客户端从其他服务器获得响应。在我的 application.conf 中,我在 spray.can 中指定了请求超时,例如:

spray.can {
  server {
    idle-timeout = ${idle-timeout}
    request-timeout = ${request-timeout}
    request-chunk-aggregation-limit = 20m
    parsing {
      max-content-length = 21m
    }
  }
  client {
    idle-timeout = ${idle-timeout}
    request-timeout = ${request-timeout}
    response-chunk-aggregation-limit = 20m
  }
}

现在,我想在我的一个 api 中覆盖这个请求超时。我写了类似的api:

def completeService(jwttoken: String, completeRequest: String): Future[HttpResponse] = {
    val pipeline: HttpRequest => Future[HttpResponse] = sendReceive ~> unmarshal[HttpResponse]
        val response: Future[HttpResponse] = pipeline(Post(some-remote-url, completeRequest)
          ~> addHeader("FROM", jwttoken))
    response
}

那么,如何将 request-timeout 放在这个方法中呢?通过覆盖 application.conf

我试过了

 implicit val timeoutVal: Timeout = Timeout(scala.concurrent.duration.Duration(100, MILLISECONDS).asInstanceOf[FiniteDuration])

我得到了这个:

  test 2020-03-06 08:48:12.147 GMT [WARN] a.k.i.AskPatternInstrumentation - Timeout triggered for ask pattern to actor [IO-HTTP] at [pipelining.scala:38]
  test 2020-03-06 08:48:12.573 GMT [INFO] akka.actor.DeadLetterActorRef - Message [spray.http.HttpResponse] from Actor[akka://test-app/user/IO-HTTP/host-connector-1/1#-1105043312] to Actor[akka://test-app/deadLetters] was not deliver

【问题讨论】:

    标签: scala spray spray-client


    【解决方案1】:

    我认为你可以添加一个隐式参数requestTimeout。该参数的数据类型是 akka.util.Timeout。您可以查看此link 了解更多详情或查看此link

    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)
    

    如果有帮助请告诉我!!

    【讨论】:

    • 我引用了相同的链接但没有运气
    • 您遇到了什么问题?
    • 酷..有帮助吗?
    • 当我点击 API 时,它说超时触发了对演员的询问模式。但是在邮递员中,它显示请求处于待处理状态。下一行是 Akka.actor.DeadLetterActorRef
    • 我认为超时太小了。将其更改为 1 分钟,让我知道它是否有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2016-07-21
    • 2014-08-16
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多