0

私は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
  }
}

今、私は 1 つの API でこの request-timeout をオーバーライドしたいと考えています。私は次のような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
4

1 に答える 1