//這兒引用李衛民的一段概述java
在微服務架構中,根據業務來拆分紅一個個的服務,服務與服務之間能夠經過 RPC
相互調用,在 Spring Cloud 中能夠用 RestTemplate + Ribbon
和 Feign
來調用。爲了保證其高可用,單個服務一般會集羣部署。因爲網絡緣由或者自身的緣由,服務並不能保證 100% 可用,若是單個服務出現問題,調用這個服務就會出現線程阻塞,此時如有大量的請求涌入,Servlet
容器的線程資源會被消耗完畢,致使服務癱瘓。服務與服務之間的依賴性,故障會傳播,會對整個微服務系統形成災難性的嚴重後果,這就是服務故障的 「雪崩」 效應。web
爲了解決這個問題,業界提出了熔斷器模型。spring
Netflix 開源了 Hystrix 組件,實現了熔斷器模式,Spring Cloud 對這一組件進行了整合。在微服務架構中,一個請求須要調用多個服務是很是常見的,以下圖:api
較底層的服務若是出現故障,會致使連鎖故障。當對特定的服務的調用的不可用達到一個閥值(Hystrix 是 5 秒 20 次) 熔斷器將會被打開。瀏覽器
熔斷器打開後,爲了不連鎖故障,經過 fallback
方法能夠直接返回一個固定值。網絡
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<!--主要引入hystrix斷路器依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.exception.HystrixBadRequestException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.ley.springcloud.hystrix.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
server
關閉服務提供者,再次請求http://localhost:8704/api/hystrix/ribbon/hello瀏覽器顯示架構
hello fall back
Feign是自帶熔斷器的,但默認是關閉的.須要在配置文件中配置打開它,在配置文件增長如下代碼:app
feign
import com.ley.springcloud.hystrix.feign.service.fallback.HelloServiceFallback;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
關閉服務提供者,再次請求http://localhost:9001/api/hystrix/feign/hello瀏覽器顯示ide
request error