Spring Boot ParallelFlux doOnNext如何处理异常

kqlmhetl  于 2023-04-30  发布在  Spring
关注(0)|答案(1)|浏览(129)

在我的项目中,我有这个:

ParallelFlux<Device> flux = Flux.fromIterable(children)
                .delayElements(Duration.ofMillis(10))
                .parallel(18)
                .runOn(Schedulers.elastic(), 10)
                .doOnNext(c -> recursiveValidationThroughoutChildren(c, tracker)
                });

其中 recursiveValidationThroughoutChildren 是一个声明如下的方法:

boolean recursiveValidationThroughoutChildren(Device d, NodeChangesTracker tracker) throws Exception;

我不明白的是如何处理最后一个方法抛出的异常。我希望将异常传播到ParallelFlux之外。这可能吗?正确的处理方法是什么?

3htmauhk

3htmauhk1#

我按照@Rozart建议的链接操作,但我不能按照它所解释的那样应用解决方案。我不得不稍微改变一下:

ParallelFlux<Device> flux = Flux.fromIterable(children)
                .delayElements(Duration.ofMillis(10))
                .parallel(18)
                .runOn(Schedulers.elastic(), 10)
                .doOnNext(child -> {
                    try {
                        recursiveValidationThroughoutChildren(child, tracker);
                    } catch (Exception ex) {
                        Flux.error(ex);
                    }
                });

之所以需要进行更改,是因为ParallelFlux不支持“handle”方法,所以我必须添加一个try catch并使用Flux重新启动异常。我不知道这是否是一个好的练习,但这是我让它工作的唯一方法。

相关问题