Java + Reactor: Http-вызов для каждой записи - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть Stream<A>, который я хочу перебрать и получить дополнительную информацию о каждой записи из другого сервиса. В конце концов он должен стать Stream<B>.

Поскольку я использую Jetty, я не могу использовать .block().

Как мне это сделать с помощью Reactor Project?

1 Ответ

0 голосов
/ 16 июля 2019

Вы можете использовать flatMap:

Flux<A> fluxA = //...;
Flux<B> fluxB = sampleFlux.flatMap(elem -> fetchDataFromRemoteService(elem));

где fetchDataFromRemoteService (A a) возвращает Publisher.

Или вы можете использовать Flux # concatMap:

Flux<A> fluxA = //...;
Flux<B> fluxB = sampleFlux.concatMap(elem -> fetchDataFromRemoteService(elem));

Разница между flatMap и concatMap заключается в том, что во втором случае все действия будут следовать друг за другом.

Или:

Stream<B> streamB =  Flux.fromStream(streamA)
                         .flatMap(this::fetchDataFromRemoteService)
                         .toStream();
...