Могу ли я установить тайм-аут и количество повторных попыток для конкретного запроса конвейера?

При использовании конвейерной обработки спрей сделать HTTP-запрос, как это:

val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }

Есть ли способ указать время ожидания для запроса и количество раз, которое он должен повторить для этого конкретного запроса?

Всю документацию я нашел только ссылки, делающие в конфигурации (и даже тогда я не могу заставить его работать).

Спасибо

2 ответа

Решение

С конфигурационным файлом

Я использую Spray 1.2.0 в системе Akka. Внутри моего актера я импортирую существующую систему 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, но вы должны определить все параметры. (На основании примера использования спрея.)

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)

Я считаю, что самый простой способ переопределить тайм-аут по умолчанию в коде является использование неявного futureTimeout аргумент sendReceive метод. Тип данных этого параметра akka.util.Timeout, Так что, если вы хотите установить тайм-аут на 120 секунд вместо 60 секунд по умолчанию, вы можете сделать это...

implicit val timeout = Timeout(120 seconds)
val urlpipeline = sendReceive ~> unmarshal[String]
urlpipeline { Get(url) }

Однако я не вижу ни одного параметра, который позволил бы вашему клиентскому коду изменить максимальное количество попыток аналогичным образом.

Другие вопросы по тегам