【Spring Cloud筆記】 斷路器-hystrix

在微服務架構中,一個微服務的超時失敗可能致使瀑布式連鎖反映,Spring Cloud Netflix 的斷路器Hystrix經過自主反饋,防止了這種狀況發生。下面介紹簡單的斷路器使用方法。java

【step1】:在項目的pom文件添加Hystrix依賴spring

 

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

 

【step2】:因爲Spring Cloud集羣內部服務調用能夠經過Ribbon或者Feign實現,因此斷路器具體使用也分兩種場景。先介紹Ribbon使用方式。架構

一、在啓動類加註解,@EnableCircuitBreaker,開啓斷路器支持app

二、在服務調用上就愛註解@HystrixCommand,示例代碼以下:ide

@Service
public class RestService {

  @Autowired
  RestTemplate restTemplate;

  @HystrixCommand(fallbackMethod = "serviceFailure")
  public String getHelloContent() {
    return restTemplate.getForObject("http://SERVICE-001/",String.class);
  }

  public String serviceFailure() {
    return "the service is not available !";
  }
}

這裏注意:微服務

一、@HystrixCommand註解的fallbackMethod指定失敗後的備用處理方法,咱們能夠分別將原服務SERVICE-001開啓和關閉後分別執行調用測試,正常狀況下返回原服務內容,當原服務不可用的狀況下,將返回serviceFailure備用方法的內容測試

二、備用方法定義的返回類型必須與原方法一致,不然會拋出轉換異常。ui

 

【step3】:Feign中使用斷路器Hystrixspa

一、因爲Feign內部已經支持斷路器,不須要顯示在啓動類上加@EnableCircuitBreaker註解rest

二、在Feign類上註解@FeignClient,並經過fallback指定服務異常備用類,示例代碼以下

@FeignClient(name = "SERVICE-001", fallback = RestServiceFailure.class)
public interface RestService {
@RequestMapping(value = "/test", method = RequestMethod.GET)
  public String test();
}

  

三、建立服務異常備用類,注意必須實現RestService接口,並添加註解,做爲bean注入到容器中,以下

 

@Service
public class RestServiceFailure implements HelloWorldService {
  @Override
  public String test() {
    return "the service is not available !";
  }
}

測試方法同Ribbon同樣,能夠獲得相同的結果。

相關文章
相關標籤/搜索