Spring webflux: гонка параллельных вызовов и отмена / возврат, когда в одном из ответов есть данные - PullRequest
0 голосов
/ 14 ноября 2018

У меня три параллельных вызова к трем различным конечным точкам, и только один из них вернет данные, которые мне нравится обрабатывать (ответ будет содержать данные только для enpoint-1, enpoint-2 или endpoint-3). Если один из этих вызовов возвращает данные, я хотел бы немедленно вернуть эти данные и забыть о других вызовах ... ¿Как я могу добиться этого с помощью Spring Webflux?

У меня есть три звонка с:

Mono<MyResponse> result = client.post()
  .uri('uri')
  .body(Mono.just(request), MyRequest.class)
  .retrieve()
  .bodyToMono(MyResponse.class);

Добавлено в список моно

 List<Mono<MyResponse>> calls

И я собираю все ответы и ищу первый элемент:

Flux.merge(calls).toStream().forEach(response -> myResponseList.addAll(response));

Но я хотел бы вернуть данные, как только любой из вызовов вернет что-то отличное от нуля, и не будет ждать завершения «слияния».

Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете взять только первый элемент вашего потока

 Flux.merge(calls).take(1)

Вы получаете новый Flux только с первым элементом, и он завершается после его производства.

...