Java + Reactor:每条记录的Http调用
Java + Reactor: Http call for each record
我有一个 Stream<A>
,我想遍历它并从另一个服务中获取有关每条记录的附加信息。最后应该变成Stream<B>
.
因为我正在使用 Jetty
我不能使用 .block()
.
如何使用 Reactor Project 做到这一点?
你可以使用平面地图:
Flux<A> fluxA = //...;
Flux<B> fluxB = sampleFlux.flatMap(elem -> fetchDataFromRemoteService(elem));
其中 fetchDataFromRemoteService(A a) return 发布者。
或者你可以使用 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();
我有一个 Stream<A>
,我想遍历它并从另一个服务中获取有关每条记录的附加信息。最后应该变成Stream<B>
.
因为我正在使用 Jetty
我不能使用 .block()
.
如何使用 Reactor Project 做到这一点?
你可以使用平面地图:
Flux<A> fluxA = //...;
Flux<B> fluxB = sampleFlux.flatMap(elem -> fetchDataFromRemoteService(elem));
其中 fetchDataFromRemoteService(A a) return 发布者。
或者你可以使用 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();