Spring WebFlux - повторная попытка моно из середины потока - PullRequest
0 голосов
/ 23 ноября 2018

Предположим, у нас есть следующий код:

T someObject = ...;
return step1(someObject)
            .flatMap(this::step2)
            .flatMap(this::step3)
            .flatMap(this::step4)
            .flatMap(this::step5)
            .timeout(timeout)
            .retryBackoff(numberOfRetries, Duration.ofMillis(100));

Каждый из этих методов шага возвращает новый Mono

В настоящий момент с этой реализацией, если на шаге 3 возникает исключение,шаг 4 или шаг 5, весь процесс повторяется, начиная с шага 2.Я хотел бы иметь возможность перезапустить поток, с которого произошло исключение, например, если исключение произошло на шаге 4, поток повторяется только с шага 4 (конечно, повторный ввод является успешным ответом с шага 3).

Возможно ли реализовать каким-либо образом в текущей версии ??

Версия Reactor Core

3.2.2.RELEASE

Версия JVM (например, java -version)

1,8

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете применять отдельные retryBackoff для каждого шага.

T someObject = ...;
return step1(someObject)
        .flatMap(o1 -> step2(o1).retryBackoff(...))
        .flatMap(o2 -> step3(o2).retryBackoff(...))

Было бы лучше инкапсулировать отдельные временные интервалы и retryBackOffs в stepN методы

...