springcloud-4.hystrix熔断器

简介

Netflix的 Hystrix 是一个帮助解决分布式系统交互时超时处理和容错的类库, 它同样拥有保护系统的能力.

Hystrix的3个状态:

DUpyeP.png

改造user-consumer

  • 依赖配置
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  • UserApplication

在启动引导类上添加 @EnableCircuitBreaker 注解, 打开熔断器

@EnableCircuitBreaker
public class UserApplication {
....
}
  • UserController

1, 添加 @DefaultProperties(defaultFallback = "defaultFallback") 失败回调方法

2, 在需要熔断的方法上添加**@HystrixCommand**注解

3, 添加测试异常代码

@RestController
@RequestMapping("/user")
@DefaultProperties(defaultFallback = "defaultFallback")
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/{id}")
    @HystrixCommand
    public User queryById(@PathVariable Integer id){
        if (id == 1) {
            throw new RuntimeException("出现异常了");
        }
        User user = restTemplate.getForObject("http://user-service/user/" + id, User.class);
        return user;
    }

    public User defaultFallback(){
        return new User();
    }

}
  • 配置文件
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 2000
      circuitBreaker:
        errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
        sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
        requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20

启动

我们访问: http://127.0.0.1:8081/user/1 会报错, http://127.0.0.1:8081/user/2 访问正常, 但是我们多次访问user/1后, 会发现第二个调用也失败了。

DUPPRe.png

源代码下载