Предложение: Выполнение параллельного звонка из моего сервиса в другой микро сервис - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть следующее требование:

  • Выполнение вызова БД на основе определенных критериев и выборки списка результатов
  • Для каждой записи, присутствующей в списке, выполните вызов GET API для микросервис
  • Консолидация всех результатов микросервиса и выдача ответа

Я хочу сделать второй шаг параллельным. Теперь по данным известно, что в списке будет не более 15 записей. Поэтому я подумал об использовании executorservice для этого.

Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())

Теперь я не очень уверен в том, использует ли

  1. ExecutorService лучший подход для моего сценария. Или я должен использовать что-то еще
  2. Должен ли я создать нового исполнителя, например Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()), или позволить контейнеру внедрить управляемого исполнителя, используя @Autowired

1 Ответ

1 голос
/ 07 февраля 2020

Поскольку у вас есть List записей, вы можете перебирать его, используя parallelStream.

List<SomeObject> objectList = resultFromDB();
objectList.parallelStream()
          .map(obj -> makeApiCallInParallel(obj))
          .collect(Collectors.toList());

parallelStream будет выполнять вызовы API параллельно. Количество параллельных вызовов ограничено количеством потоков вашего ЦП.

Вы можете увеличить его, используя свойство JVM:

-Djava.util.concurrent.ForkJoinPool.common.parallelism=20

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...