Моделирование последующих параллельных запросов в Akka Streams - PullRequest
0 голосов
/ 09 марта 2020

Я только начинаю работать с потоками akka, и у меня возник вопрос, как лучше всего смоделировать следующий сценарий использования:

Существует одна система с набором ресурсов, которые мне нужно запросить (REST) ​​и выполнить некоторые операции над каждым из элементов. Сначала мне нужно удалить пару атрибутов, затем мне нужно добавить некоторые другие атрибуты.

Мне нужно сохранить состояние, я хотел бы максимально распараллелить, но система ограничивает скорость, поэтому я необходимо убедиться, что не go в течение определенной степени распараллеливания (в потоке).

Первые шаги просты:

1) Получить список ресурсов из системы 2) mapAsync по этому списку для запроса информации и преобразования ее в объект данных, который я передаю вниз

Теперь это становится интересным: мне нужно сделать несколько запросов DELETE для ресурса (на основе объекта данных).

Я мог бы

  • выполнить все эти запросы за один шаг потока. Это, вероятно, не будет участвовать в каком-либо виде ограничения скорости или
  • сведет список объектов запросов DELETE в поток, а затем снова будет использовать mapAsync для параллельного выполнения X из них.

Но как мне продолжить работу с исходным ресурсом после выполнения всех запросов DELETE? Должен ли я использовать reduce или fold в запросах DELETE? Это означало бы, что перед тем, как я смогу продолжить, необходимо завершить восходящий поток (может, в любом случае, помочь с регулированием).

Я предполагаю, что этот вариант использования очень распространен, но мне еще предстоит найти хорошее решение для него.

...