Вызов нескольких сервисов rest/soap в нескольких потоках и ожидание их ответа

Мне нужно вызвать три метода из метода. Эти три метода, в свою очередь, вызывают различные службы REST или SOAP. Я хочу сделать обработку этих трех методов асинхронной, т.е. остальные вызовы и вызовы мыла выполняются параллельно. Кроме того, я хочу, чтобы основной поток дождался завершения всех этих потоков, а затем обработал данные, полученные потоками. Каков наилучший способ добиться этого? Я думаю, я мог бы изучить следующие способы -

  • вилочное соединение (java 7)
  • параллельные потоки
  • служба исполнителя (разумно ли использовать это в этом сценарии?)

Есть ли другие способы? Какой из вышеперечисленных способов лучше всего подходит для моего сценария?


person N..    schedule 20.08.2018    source источник


Ответы (1)


услуга исполнителя + Завершаемый фьючерс

List<CompletableFuture<SomeResponse>> futures = new ArrayList<>();
//assign futures to executor
futures.add(CompletableFuture.supplyAsync(() -> client.perform(request), executor));
...
//create combined future
CompletableFuture combinedFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
//wait for all features to execute or timeout
combinedFuture.get(50, TimeUnit.SECONDS);
//go through results
for (CompletableFuture<SomeResponse> future : futures){
...
}
person GiorgosDev    schedule 20.08.2018