Webflux: OnErrorResume после исчерпания повторов не запускается - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь выполнить код после повторного исчерпания, используя onErrorResume, но onErrorResume не запускается.

Вот пример кода

Mono.just(request)
                .filter(this::isConditionSatified)
                .map(aBoolean -> performSomeOperationIfConditionIsSatified(request))
                .repeatWhenEmpty(Repeat.onlyIf(i -> true)
                        .exponentialBackoff(Duration.ofSeconds(5)), Duration.ofSeconds(10))
                        .timeout(Duration.ofSeconds(30)))
                .delaySubscription(Duration.ofSeconds(10)))
                .onErrorResume(throwable -> {
                    log.warn("Max timeout reached", throwable);
                    return Mono.just(false);
                });

onErrorResume никогда не запускается , Я пытаюсь использовать это как запасной вариант. Моя цель - при повторном истощении вернуть значение false.

Мой юнит-тест жалуется на

expectation "expectNext(false)" failed (expected: onNext(false); actual: onComplete())

Любая помощь или предложение будут полезны.

1 Ответ

1 голос
/ 23 апреля 2020

, поскольку источник empty действителен сам по себе, repeatWhenEmpty не обязательно распространяет исключение после исчерпания его попыток. Утилита Repeat из аддонов не работает, даже когда срабатывает «тайм-аут» (как подсказано в javado c параметра timeout: «тайм-аут, после которого новые повторы не инициируются», хорошо, что может быть понятнее).

, поскольку вы используете repeatWhenEMPTY, я предполагаю, что пустой регистр всегда "не имеет значения" для вас, и поэтому defaultIfEmpty(false) должно быть приемлемым решением.

...