Spring Cloud熔斷機制 -- 斷路器

1. 熔斷機制介紹

在介紹熔斷機制以前,咱們須要瞭解微服務的雪崩效應。在微服務架構中,微服務是完成一個單一的業務功能,這樣作的好處是能夠作到解耦,每一個微服務能夠獨立演進。可是,一個應用可能會有多個微服務組成,微服務之間的數據交互經過遠程過程調用完成。這就帶來一個問題,假設微服務A調用微服務B和微服務C,微服務B和微服務C又調用其它的微服務,這就是所謂的「扇出」。若是扇出的鏈路上某個微服務的調用響應時間過長或者不可用,對微服務A的調用就會佔用愈來愈多的系統資源,進而引發系統崩潰,所謂的「雪崩效應」。spring

 

a

熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。咱們在各類場景下都會接觸到熔斷這兩個字。高壓電路中,若是某個地方的電壓太高,熔斷器就會熔斷,對電路進行保護。股票交易中,若是股票指數太高,也會採用熔斷機制,暫停股票的交易。一樣,在微服務架構中,熔斷機制也是起着相似的做用。當扇出鏈路的某個微服務不可用或者響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的調用,快速返回錯誤的響應信息。當檢測到該節點微服務調用響應正常後,恢復調用鏈路。架構

二、實戰

1. 在maven工程(前面章節中介紹的Ribbon或者Feign工程)的pom.xml中添加hystrix庫支持斷路器

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

2. 在Ribbon應用中使用斷路器

在Spring Boot啓動類上添加@EnableCircuitBreaker註解app

1 @SpringBootApplication
2 @EnableDiscoveryClient
3 @EnableCircuitBreaker
4 public class ServiceRibbonApplication {
5 
6     public static void main(String[] args) {
7         SpringApplication.run(ServiceRibbonApplication.class, args);
8     }
。。。 。。。

三、 在Feign應用中使用斷路器maven

1). Feign內部已經支持了斷路器,因此不須要想Ribbon方式同樣,在Spring Boot啓動類上加額外註解ide

2). 用@FeignClient註解添加fallback類, 該類必須實現@FeignClient修飾的接口。微服務

1 @FeignClient(name = "SERVICE-HELLOWORLD", fallback = HelloWorldServiceFailure.class)
2 public interface HelloWorldService {
3     @RequestMapping(value = "/", method = RequestMethod.GET)
4     public String sayHello();
5 }

3). 建立HelloWorldServiceFailure類, 必須實現被@FeignClient修飾的HelloWorldService接口。注意添加@Component或者@Service註解,在Spring容器中生成一個Beanui

複製代碼

1 @Component
2 public class HelloWorldServiceFailure implements HelloWorldService {
3     @Override
4     public String sayHello() {
5         System.out.println("hello world service is not available !");
6         return "hello world service is not available !";
7     }
8 }

複製代碼

相關文章
相關標籤/搜索