1.作用:当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果。
熔断器的三种状态:
Closed:关闭状态(断路器关闭),所有请求都正常访问。
Open:打开状态(断路器打开),所有请求都会被隆级。Hystⅸx会对请求情况计数。当一定时间内失败请求百分比达到园值,则触发熔断,断路会完全关闭。默认失败比例的园值是50%,请求次数最少不低于20次
Half Open:半开状态, Closed状态不是永久的,关闭后会进入休眠时间(默认是5s)随后断路会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会完全打开断路器,否则继续保持关闭,再次进行休睨计时
2.实现熔断器
1>引入起步坐标
首先在user-consumer中引入Hystix依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2>用注解的放肆配置:
//配置多多少个链接进行统计 默认20个 
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
//当多次访问失败就会进入半开状态 此时在配置时间内所有的请求都会被降级  直接返回错误的提示页面
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),
//当一定时间内失败请求百分比达到园值,则触发熔断,断路会完全打开。默认失败比例的园值是50%
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60")
@RestController
@RequestMapping("User")
@DefaultProperties(defaultFallback = "queryUserByIdFallback")
public class UserController {
    @Autowired
    private UserFeign userFeign;
      @Autowired
       private RestTemplate restTemplate;
  @RequestMapping("{id}")
    @HystrixCommand(
            commandProperties = {
            //没过多少次进行统计
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60")
    })
    public String selectById(@PathVariable(name = "id") Integer id) {
        if (id % 2 == 0) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        String url = "http://user-service/User/" + id;
        String user = restTemplate.getForObject(url, String.class);
        return user;
    }
   public String queryUserByIdFallback() {
        return "系统繁忙。。。";
    }
原文:https://www.cnblogs.com/asndxj/p/11480619.html