Могу ли я установить тайм-аут и количество повторных попыток для конкретного запроса конвейера?
При использовании конвейерной обработки спрей сделать 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) }
Однако я не вижу ни одного параметра, который позволил бы вашему клиентскому коду изменить максимальное количество попыток аналогичным образом.