Поскольку вы пометили этот вопрос как akka
, я предполагаю, что вы используете akka-http для вызовов.Вы можете использовать akka-streams для выполнения запросов в пакетном режиме, чтобы избежать переполнения ваших соединений, например:
Source(reportsVector)
.grouped(safeValue)
.mapAsync(1)(reps => Future.traverse(reps)(x => ...)) //do your stuff
.mapConcat(identity)
.runWith(Sink.seq)
Пример будет выполнять safeValue
одновременных вызовов одновременно и собирать все результаты вколлекция, которая будет возвращена после завершения всего потока.Вы также можете поиграть с другими операторами, такими как sliding
и splitWhen
, чтобы сделать его более подходящим для вашего случая использования, вы также можете настроить значения одновременности safeValue
и mapAsync
.Обратите внимание, что источником этого потока является известный вектор (reportsVector
), но он также может быть неизвестным конечным потоком отчетов.