对于需要根据状态码自动重试某些API调用的用例,我正在评估spring-retry。我可以像这样自定义重试策略
@Component("httpStatusCodeRetryPolicy")
public class HttpStatusRetryPolicy extends ExceptionClassifierRetryPolicy
{
@PostConstruct
public void init()
{
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
this.setExceptionClassifier( new Classifier<Throwable, RetryPolicy>()
{
@Override
public RetryPolicy classify(Throwable classifiable )
{
if ( classifiable instanceof HttpStatusCodeException)
{
var exception = (HttpStatusCodeException)classifiable;
if(exception.getStatusCode() == HttpStatus.REQUEST_TIMEOUT){
retryPolicy.setMaxAttempts(3);
}
else if (exception.getStatusCode() == HttpStatus.valueOf(429) ||
exception.getStatusCode() == HttpStatus.valueOf(502) ||
exception.getStatusCode() == HttpStatus.valueOf(503) ||
exception.getStatusCode() == HttpStatus.valueOf(504)) {
retryPolicy.setMaxAttempts(4);
}
return retryPolicy;
}
return new NeverRetryPolicy();
}
});
}
}
但是,我还想根据这些状态代码自定义退避策略。我想对一些响应状态代码使用FixedBackOff策略,对其余的使用ExponentialBackOffPolicy策略。我环顾四周,没有发现任何提示。
发布于 2020-04-15 14:38:05
使用委托给所需BackOffPolicy
的自定义BackOffPolicy
,具体取决于retryContext
中的lastThrowable
。
https://stackoverflow.com/questions/61228744
复制相似问题