Я только начинаю работать с потоками akka, и у меня возник вопрос, как лучше всего смоделировать следующий сценарий использования:
Существует одна система с набором ресурсов, которые мне нужно запросить (REST) и выполнить некоторые операции над каждым из элементов. Сначала мне нужно удалить пару атрибутов, затем мне нужно добавить некоторые другие атрибуты.
Мне нужно сохранить состояние, я хотел бы максимально распараллелить, но система ограничивает скорость, поэтому я необходимо убедиться, что не go в течение определенной степени распараллеливания (в потоке).
Первые шаги просты:
1) Получить список ресурсов из системы 2) mapAsync
по этому списку для запроса информации и преобразования ее в объект данных, который я передаю вниз
Теперь это становится интересным: мне нужно сделать несколько запросов DELETE для ресурса (на основе объекта данных).
Я мог бы
- выполнить все эти запросы за один шаг потока. Это, вероятно, не будет участвовать в каком-либо виде ограничения скорости или
- сведет список объектов запросов DELETE в поток, а затем снова будет использовать
mapAsync
для параллельного выполнения X из них.
Но как мне продолжить работу с исходным ресурсом после выполнения всех запросов DELETE? Должен ли я использовать reduce
или fold
в запросах DELETE? Это означало бы, что перед тем, как я смогу продолжить, необходимо завершить восходящий поток (может, в любом случае, помочь с регулированием).
Я предполагаю, что этот вариант использования очень распространен, но мне еще предстоит найти хорошее решение для него.