Spring Reactor:如何压缩两个Flux,但顺序如何?

时间:2019-04-28 19:03:54

标签: java reactive-programming project-reactor

假设我有两个外部服务。假设我们有一个项Foo,而serviceA返回项A,而serviceB返回项B

我想要得到的是(A a, B b)格式的处理程序,其中ab是同一查询项目的对应对象。

Flux::zip是到目前为止我发现的最接近的东西,但是由于不能保证订购,所以它并不是我要找的东西。我正在寻找类似CompletableFuture::allOf

的东西

我总是可以通过使这两个调用同步来作弊,但这从反应式编程中获得了很多乐趣。另外,我可以管理一些缓存并仅在两个项目到达时才发出记录,但是我更喜欢让事物无状态。

2 个答案:

答案 0 :(得分:1)

结帐:concatWith。您可以根据需要探索其他concat变体。

注意:Flux.concat(f1, f2)f1.concatWith(f2)本质上是相同的。

答案 1 :(得分:1)

如果在Flux.flatMap(f1)操作之前或期间使用Flux.flatMap(f2)zip,请检查这些flatMap是否正在执行其他异步方法,例如API端点调用。在这种情况下,您可能需要将其替换为Flux.flatMapSequential(f1)Flux.flatMapSequential(f2),以保持转换后flux元素的顺序。