Повторная попытка HTTP-запросов Akka становится экспоненциально медленнее с каждым запросом

#scala #akka-http

#scala #akka-http

Вопрос:

Почему выполнение приведенного ниже кода занимает около минуты? Что я делаю не так?

   implicit val actors = ActorSystem("request")
  val config = ClientConnectionSettings(actors).withConnectingTimeout(5.seconds)
  val settings = ConnectionPoolSettings(actors).withConnectionSettings(config).withMaxRetries(0)

  def req(attempt: Int = 1) {
    implicit val ec: ExecutionContextExecutor = ExecutionContext.global
    println(s"[${LocalDateTime.now}] Running ${attempt}:")
    Http()(actors)
      .singleRequest(settings = settings, request = HttpRequest(uri = Uri("http://x")))
      .onComplete {
        case Success(v) =>
          println(s"[${LocalDateTime.now}]   ${v.toString}")
        case Failure(x) =>
          println(s"[${LocalDateTime.now}]   ${x.getCause.toString}")
          if (attempt < 10)
            req(attempt   1)
      }
  }

  req()
 

Вывод (обратите внимание на временные метки):

 [2020-12-03T16:39:15.044092200] Running 1:
[2020-12-03T16:39:18.655240600]   java.net.UnknownHostException: x
[2020-12-03T16:39:18.655240600] Running 2:
[2020-12-03T16:39:18.804865900]   java.net.UnknownHostException: x
[2020-12-03T16:39:18.805865400] Running 3:
[2020-12-03T16:39:19.035596500]   java.net.UnknownHostException: x
[2020-12-03T16:39:19.035596500] Running 4:
[2020-12-03T16:39:19.525629100]   java.net.UnknownHostException: x
[2020-12-03T16:39:19.525629100] Running 5:
[2020-12-03T16:39:20.384635500]   java.net.UnknownHostException: x
[2020-12-03T16:39:20.384635500] Running 6:
[2020-12-03T16:39:22.166904400]   java.net.UnknownHostException: x
[2020-12-03T16:39:22.166904400] Running 7:
[2020-12-03T16:39:25.399605500]   java.net.UnknownHostException: x
[2020-12-03T16:39:25.399605500] Running 8:
[2020-12-03T16:39:34.705446800]   java.net.UnknownHostException: x
[2020-12-03T16:39:34.705446800] Running 9:
[2020-12-03T16:39:53.291327600]   java.net.UnknownHostException: x
[2020-12-03T16:39:53.291327600] Running 10:
[2020-12-03T16:40:23.490653800]   java.net.UnknownHostException: x
 

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

Ответ №1:

Решение, как выясняется, состоит в том, чтобы добавить .withMaxConnectionBackoff(..) к ConnectionPoolSettings , потому что это приводит не только к повторным попыткам, но и ко всем запросам, выполняемым в одной цепочке.

Комментарии:

1. Еще 2 дня я не могу. 🙂