Rx java 在反应器的功能管道中穿过下游的物体

Rx java 在反应器的功能管道中穿过下游的物体,rx-java,reactive-programming,project-reactor,Rx Java,Reactive Programming,Project Reactor,我不熟悉反应堆和反应式编程,我正在尝试解决以下情况 我从Kafka topic接收到一系列对象,对于flux中的每个记录,我需要调用2个服务并验证该对象 public void consume(Flux<Data> flux) { flux.map(data->callRESTService1(data)).map(...<I need the data once again here to call rest service 2> } 现在我正在使用下面的风格来

我不熟悉反应堆和反应式编程,我正在尝试解决以下情况

我从Kafka topic接收到一系列对象,对于flux中的每个记录,我需要调用2个服务并验证该对象

public void consume(Flux<Data> flux)
{
flux.map(data->callRESTService1(data)).map(...<I need the data once again here to call rest service 2>
}
现在我正在使用下面的风格来实现这一点,但有没有更好/正确的方法来实现这一点

public void consume(Flux<Data> flux)
{
   flux.subscribe(data->handleData(data));
}


 public void handleData(data)
    {
 Flux.concat(callRestService1(data),callRestService2(data)).reduce(data,reduce());
    }

另外,如果其中一个服务关闭,我需要在侦听器上传播错误,以便消息不被确认,但在另一种情况下,如果验证失败,需要将消息发布到另一个主题。

两个路径都需要原始元素,并且每个路径都有不同的错误处理方式,这一事实很好地表明您可能需要平面图:


你可以试着像这样压缩平面图

Flux<Strings>  flux = Flux.just("d");
flux.flatMap(strings -> {
return Flux.zip(callRestService1(strings).onErrorResume(throwable -> dosomeshits(throwable)),callRestService2(strings).onErrorResume(throwable -> dosomeshits(throwable)),(t1, t2) -> t1)

}/P>我认为你需要考虑使用平面图和两个通量来为你的服务提供服务。

Flux<Strings>  flux = Flux.just("d");
flux.flatMap(strings -> {
return Flux.zip(callRestService1(strings).onErrorResume(throwable -> dosomeshits(throwable)),callRestService2(strings).onErrorResume(throwable -> dosomeshits(throwable)),(t1, t2) -> t1)