天天看點

resttemplate 請求重試_使用Spring Cloud Ribbon重試請求

使用Spring Cloud Ribbon重試請求

在微服務調用中,一些微服務圈可能調用失敗,通過再次調用以達到系統穩定性效果,本文展示如何使用Ribbon和Spring Retry進行請求再次重試調用。

在Spring Cloud中,使用load balanced RestTemplate對外部服務進行請求調用,建立一個負載平衡的RestTemplate是非常簡單:

@Configuration

public class MyConfiguration {

@LoadBalanced

@Bean

RestTemplate restTemplate() {

return new RestTemplate();

}

}

public class MyClass {

@Autowired

private RestTemplate restTemplate;

public String doOtherStuff() {

String results = restTemplate.getForObject("http://stores/stores", String.class);

return results;

}

}

這裡加入@LoadBalanced 元注解讓你利用一個發現服務比如Eureka進行服務注冊,正如你在doOtherStuff方法中看到,我們對URL http://stores/stores送出請求,主機名stores并不是實際注冊的主機名,而是在發現伺服器中注冊的stroes服務名稱,RestTemplate将使用stores服務所在主機名或IP位址替代stores主機名。

正如我們都知道,這樣的請求可能有問題。 出于任何原因,某些可能會出錯,請求可能會失敗。 這就是為什麼在健壯的應用程式中,當遇到失敗時,可以重試類似上面的API請求。 發生這種失敗問題原因可能是服務完全停止,我們永遠不會得到回應。 然而,故障可能的是由于某種類型的網絡問題,并且随後的請求可能會成功。 甚至可能是服務的某個特定執行個體可能遇到問題的情況,但是存在完全可能是請求另一執行個體時卻能夠處理。

在Spring Cloud,如果你使用一個負載平衡RESTTemplate進行API請求,如果請求失敗,開發者可以決定重試請求,在 Spring Retry project 項目中提供重試邏輯,使用 Ribbon properties 配置重試次數以及哪個請求需要重試。