三大概念:服务降级,服务熔断,服务限流
开始
1.添加依赖
2.实现业务
3.在启动类中添加注解@EnableCircuitBreaker
1.服务降级
为需要服务降级的方法添加注解,并提供其服务降级方法
@HystrixCommand(fallbackMethod = "payment_TimeoutHandler",commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
})
public String payment_Timeout(){
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "线程: "+Thread.currentThread().getName()+" Processing For Timeout";
}
public String payment_TimeoutHandler(){
return "sorry, server is busy right now";
}
统一的默认服务降级
1.在类上添加注解
@DefaultProperties(defaultFallback = "payment_dafualtHandler",commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1500")
})
2.给需要统一处理的方法添加注解@HystrixCommand
也可以实现feign的接口,实现类中实现各个方法(内为降级代码)
在feign接口中的@FeignClient注解中添加fallback= “实现类.class"
服务熔断(10次请求有6成出错,触发熔断,10秒钟后尝试半开)
//服务熔断
@HystrixCommand(fallbackMethod = "paymentCircuitBreakerHandler",commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"),
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60")
})
public String paymentCircuitBreaker(int id){
if (id<0){
int i = 1/0;
}
return "success";
}
public String paymentCircuitBreakerHandler(int id){
return "internal server error ,maybe you can try later";
}
dashboard 监控
1.新建module添加dashboard依赖
2.在被监控的yml中添加
management:
endpoints:
web:
exposure:
include: hystrix.stream
3.填写链接即可
http://localhost:8005/actuator/hystrix.stream