SpringCloud 重试失败的请求

2023-06-08 11:22 更新

可以配置负载均衡的​RestTemplate​以重试失败的请求。默认情况下,禁用此逻辑。您可以通过在应用程序的类路径中添加Spring重试来启用它。负载平衡的​RestTemplate​遵循与重试失败的请求有关的某些Ribbon配置值。您可以使用​client.ribbon.MaxAutoRetries​,​client.ribbon.MaxAutoRetriesNextServer​和​client.ribbon.OkToRetryOnAllOperations​属性。如果要通过对类路径使用Spring重试来禁用重试逻辑,则可以设置​spring.cloud.loadbalancer.retry.enabled=false​。有关这些属性的作用的说明,请参见Ribbon文档

如果要在重试中实现​BackOffPolicy​,则需要创建​LoadBalancedRetryFactory​类型的bean并覆盖​createBackOffPolicy​方法:

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryFactory retryFactory() {
        return new LoadBalancedRetryFactory() {
            @Override
            public BackOffPolicy createBackOffPolicy(String service) {
        		return new ExponentialBackOffPolicy();
        	}
        };
    }
}

 前面示例中的client应替换为您的Ribbon客户名称。

如果要向重试功能中添加一个或多个​RetryListener​实现,则需要创建类型为​LoadBalancedRetryListenerFactory​的bean,并返回要用于给定服务的​RetryListener​数组,如以下示例所示:

@Configuration
public class MyConfiguration {
    @Bean
    LoadBalancedRetryListenerFactory retryListenerFactory() {
        return new LoadBalancedRetryListenerFactory() {
            @Override
            public RetryListener[] createRetryListeners(String service) {
                return new RetryListener[]{new RetryListener() {
                    @Override
                    public <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback) {
                        //TODO Do you business...
                        return true;
                    }

                    @Override
                     public <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        //TODO Do you business...
                    }

                    @Override
                    public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable) {
                        //TODO Do you business...
                    }
                }};
            }
        };
    }
}


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号