Hystrix是防止雪崩的有效手段,它能够实现服务熔断,并且能够在熔断之后对请求做出快速失败响应。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
@EnableCircuitBreaker开启服务熔断
@GetMapping("order/{age}") @HystrixCommand(fallbackMethod = "testFallBack") public String test(@PathVariable("age") Integer age){ if(age<0) throw new RuntimeException("?"); System.out.println(age); return "oder"+age; } public String testFallBack(@PathVariable("age") Integer age){ return "服务器繁忙,请稍后再试!"; }
@HystrixCommand(fallbackMethod = “失败方法”)中fallbackMethod指的是请求失败你想调用的方法(defaultFallback = “testFallBack”,这样是指定所有的失败响应方法都是testFallBack)。需要注意的是,失败方法的返回类型、参数应和被调用方法一致。
Hystrix熔断服务的条件有两个,满足一个就会熔断(断路器打开,任何请求都不能访问该服务)。
在开启熔断后,5s内断路器会达到半开状态,此时会允许一个请求通过,如果这个请求成功则断路器关闭。如果失败则断路器依旧开启。重复5s这个过程。
这是用在服务调用方的,那为什么在被调用的服务上加了服务熔断还要再调用方做这样一个东西呢?那是因为某个服务能熔断、能失败响应的前提是这个服务是存货的,要是这台服务“挂掉了”,调用返回的错误是不友好的,因此,我们需要在调用方也做一些事(指失败响应)
因为OpenFeign依赖中集成了Hystrix,所以只需要引入OpenFeign依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
在前面OpenFeign的笔记中已经说过,OpenFeign是需要使用一个接口去完成服务调用。如果我们要加上失败响应,就需要写一个类实现这个接口。
这里是接口:(这里失败响应是指定类)
@FeignClient(value = "ORDER",fallback = User_Order_FallBack.class) public interface User_Order { @GetMapping("order/{age}") String test(@PathVariable("age") Integer age); }
这里是实现类:
@Component public class User_Order_FallBack implements User_Order{ @Override public String test(Integer age) { return "该服务挂了"; } }
在配置文件中加入:
feign.hystrix.enabled=true
搞定!!