Ответ к задачке про переповторы

Делимся решением задачки из предыдущего поста ⬇️

Ошибка была в порядке операторов. Дело в том, что retry срабатывает только при получении сигнала об ошибке onError, а этот сигнал при таймаутах может быть порожден только на следующей строчке.

Чтобы переповторы срабатывали и при превышении времени ожидания, строки нужно поменять местами:

fun getQr(qrcId: String): Mono<QrData> { ⠀⠀⠀return webClient.get() ⠀⠀⠀⠀⠀.uri(“/sbp/qr/{qrcId}”, qrcId) ⠀⠀⠀⠀⠀.retrieve() ⠀⠀⠀⠀⠀.bodyToMono<QrData>() ⠀⠀⠀⠀⠀.timeout(Duration.ofSeconds(1)) ⠀⠀⠀⠀⠀.retry(5) }

Теперь, если сервер не ответит за одну секунду, timeout сформирует ошибку, а retry получит её и повторит запрос.

Жми ❤️, если хочется больше задачек в сетке!