отказоустойчивость 4j Повторите попытку дооснащения

#java #kotlin #retrofit2 #resilience4j

#java #kotlin #модернизация 2 #resilience4j

Вопрос:

есть ли способ добавить конфигурацию повторной попытки аналогично circuitBreacker?

 val circuitBreakerConfig = CircuitBreakerConfig.custom()
        .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
        .failureRateThreshold(10.0F)
        .build()

    val circuitBreaker = CircuitBreaker.of("name", circuitBreakerConfig)
 
    val retrofit = Retrofit.Builder()
        .baseUrl(baseUrl)
        .addCallAdapterFactory(
            CircuitBreakerCallAdapter.of(circuitBreaker) {
                it.code() == 500
            }
        ).addConverterFactory(GsonConverterFactory.create())
        .client(httpClient)
        .build()
 

Конфигурация повторной попытки, которую я хотел использовать, такова :

 val retryConfig = RetryConfig.custom<Any>()
        .maxAttempts(3)
        .waitDuration(Duration.ofSeconds(120))
        .retryExceptions(RuntimeException::class.java)
        .build()
 

Ответ №1:

Да, вы можете

 private Retrofit buildRetrofitWithRetry(
        final OkHttpClient okHttpClient, final String baseUrl) {
    return new Retrofit.Builder()
            .client(okHttpClient)
            .addCallAdapterFactory(RetryCallAdapter.of(retry))
            .baseUrl(baseUrl)
            .addConverterFactory(JacksonConverterFactory.create())
            .build();
}