【问题标题】:reactive feign client global retry反应式假装客户端全局重试
【发布时间】:2022-01-02 16:02:25
【问题描述】:

我正在从 feign 客户端切换到响应式 feign 客户端,我已经为 feign 定义了全局重试器:

  @Bean
  Retryer retryer() {
    return new Retryer.Default(100, 1, 5);
  }

  @Bean
  ErrorDecoder errorDecoder() {
    return new HttpErrorDecoder();
  }

  static class HttpErrorDecoder implements ErrorDecoder {

    private final ErrorDecoder defaultErrorDecoder = new Default();

    @Override
    public Exception decode(String methodKey, Response response) {
      Exception exception = defaultErrorDecoder.decode(methodKey, response);

      if (response.status() != HttpStatus.SC_OK) {
        return new RetryableException(response.status(),
            "api call for url: " + response.request().url() + " failed",
            response.request().httpMethod(), exception.getCause(), null,
            response.request());
      }

      return exception;
    }
  }

使用非反应式客户端重试工作正常,使用反应式客户端错误解码器会引发 RetryableException,但 Retryer 没有反应 - 不执行重试。我主要使用 webflux Mono<T>,有没有办法让它工作或者 Retryer 不能用于响应式伪装?如果是这样,是否可以定义“全局重试”或者我是否需要为每个呼叫/单声道定义重试?

【问题讨论】:

    标签: java feign openfeign reactive-feign-client


    【解决方案1】:

    Retryer 是来自 Reactive 客户端的 removed。你应该使用ReactiveRetryPolicy

    @Bean
    public ReactiveRetryPolicy reactiveRetryPolicy() {
        return BasicReactiveRetryPolicy.retryWithBackoff(5, 100);
    }
    

    【讨论】:

    • 感谢您的回复,这似乎有效 - 如果这种更改/示例将来出现在文档中的某个地方会更好(我无法在任何地方找到它)跨度>
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2018-04-22
    • 2023-03-14
    • 2021-07-20
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多