反应式假装客户端全局重试
Posted
技术标签:
【中文标题】反应式假装客户端全局重试【英文标题】: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 不能用于响应式伪装?如果是这样,是否可以定义“全局重试”或者我是否需要为每个呼叫/单声道定义重试?
【问题讨论】:
【参考方案1】:Retryer 是来自 Reactive 客户端的 removed。你应该使用ReactiveRetryPolicy
@Bean
public ReactiveRetryPolicy reactiveRetryPolicy()
return BasicReactiveRetryPolicy.retryWithBackoff(5, 100);
【讨论】:
感谢您的回复,这似乎有效 - 如果这种更改/示例将来出现在文档中的某个地方会更好(我无法在任何地方找到它)跨度>以上是关于反应式假装客户端全局重试的主要内容,如果未能解决你的问题,请参考以下文章
假装客户端'readTimeout'与hystrix.execution.isolation.thread.timeoutInMilliseconds的配置之间是不是有任何关系
我可以假装客户端使用功能区配置覆盖ConnectTimeout和ReadTimeout吗?