ParallelFlux doOnNext, как обрабатывать исключения - PullRequest
0 голосов
/ 17 октября 2019

В моем проекте у меня есть это:

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. Является ли это возможным? Какой правильный способ справиться с этим?

1 Ответ

0 голосов
/ 18 октября 2019

Я перешел по предложенной @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 и перезапустить исключение с Flux.error,Я не знаю, хорошая ли это практика, но это единственный способ, с помощью которого я смог это сделать.

...