SpringCloud 重試失敗的請求

2023-06-08 11:22 更新

可以配置負(fù)載均衡的?RestTemplate?以重試失敗的請求。默認(rèn)情況下,禁用此邏輯。您可以通過在應(yīng)用程序的類路徑中添加Spring重試來啟用它。負(fù)載平衡的?RestTemplate?遵循與重試失敗的請求有關(guān)的某些Ribbon配置值。您可以使用?client.ribbon.MaxAutoRetries?,?client.ribbon.MaxAutoRetriesNextServer?和?client.ribbon.OkToRetryOnAllOperations?屬性。如果要通過對類路徑使用Spring重試來禁用重試邏輯,則可以設(shè)置?spring.cloud.loadbalancer.retry.enabled=false?。有關(guān)這些屬性的作用的說明,請參見Ribbon文檔。

如果要在重試中實(shí)現(xiàn)?BackOffPolicy?,則需要?jiǎng)?chuàng)建?LoadBalancedRetryFactory?類型的bean并覆蓋?createBackOffPolicy?方法:

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

 前面示例中的client應(yīng)替換為您的Ribbon客戶名稱。

如果要向重試功能中添加一個(gè)或多個(gè)?RetryListener?實(shí)現(xiàn),則需要?jiǎng)?chuàng)建類型為?LoadBalancedRetryListenerFactory?的bean,并返回要用于給定服務(wù)的?RetryListener?數(shù)組,如以下示例所示:

@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...
                    }
                }};
            }
        };
    }
}


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號