Тайм-аут запроса клиента Spray

Я новичок в скале. Я пытаюсь тайм-аут запроса 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
}

Итак, как я могу указать время ожидания запроса здесь, в этом методе? Переопределяя 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

person dharmesh singh    schedule 05.03.2020    source источник


Ответы (1)


Я думаю, вы можете добавить неявный параметр requestTimeout. Тип данных этого параметра — akka.util.Timeout. Вы можете проверить эту ссылку для получения более подробной информации или эту ссылка

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)

Дайте мне знать, если это поможет!!

person Anand Sai    schedule 05.03.2020
comment
Я ссылался на ту же ссылку, но не повезло - person dharmesh singh; 05.03.2020
comment
С какой проблемой вы столкнулись? - person Anand Sai; 05.03.2020
comment
Круто.. Помогло? - person Anand Sai; 06.03.2020
comment
Когда я нажимаю API, он говорит, что тайм-аут сработал для шаблона запроса к актеру. Но в почтальоне он показывает запрос в состоянии ожидания. И следующая строка — Akka.actor.DeadLetterActorRef. - person dharmesh singh; 06.03.2020
comment
Я думаю, что тайм-аут слишком мал. Измените его на 1 минуту и ​​дайте мне знать, если это сработает! - person Anand Sai; 06.03.2020