春のWebクライアント:特定のエラーにバックオフして再試行

piotrek:

私は、応答は5xxのときに10秒待ってから要求を3回リトライしたいと思います。しかし、私は、私が使用できる方法が表示されません。オブジェクト上

WebClient.builder()
                .baseUrl("...").build().post()
                .retrieve().bodyToMono(...)

私は方法を見ることができます:

再試行回数が、遅延なしを条件に再試行

.retry(3, {it is WebClientResponseException && it.statusCode.is5xxServerError} )

バックオフや回数が、無症状で再試行

.retryBackoff 

そこにもあるretryWhenが、私はそれを使用するかどうかはわかりません

アレクサンダー銀行:

原子炉の余分を使用すると、同じようにそれを行うことができます:

.retryWhen(Retry.onlyIf(this::is5xxServerError)
        .fixedBackoff(Duration.ofSeconds(10))
        .retryMax(3))

private boolean is5xxServerError(RetryContext<Object> retryContext) {
    return retryContext.exception() instanceof WebClientResponseException &&
            ((WebClientResponseException) retryContext.exception()).getStatusCode().is5xxServerError();
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=330169&siteId=1