假设我有两个外部服务。假设我们有一个项Foo
,而serviceA返回项A
,而serviceB返回项B
。
我想要得到的是(A a, B b)
格式的处理程序,其中a
和b
是同一查询项目的对应对象。
Flux::zip
是到目前为止我发现的最接近的东西,但是由于不能保证订购,所以它并不是我要找的东西。我正在寻找类似CompletableFuture::allOf
我总是可以通过使这两个调用同步来作弊,但这从反应式编程中获得了很多乐趣。另外,我可以管理一些缓存并仅在两个项目到达时才发出记录,但是我更喜欢让事物无状态。
答案 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
元素的顺序。