给coud-consumer-feign-order80添加resilience4j依赖
修改yml文件
resilience4j.circuitbreaker:
configs:
default:
# 熔断器打开的失败阈值
failureRateThreshold: 30
# 默认滑动窗口大小,circuitbreaker使用基于计数和时间范围欢动窗口聚合统计失败率
slidingWindowSize: 10
# 计算比率的最小值,和滑动窗口大小去最小值,即当请求发生5次才会计算失败率
minimumNumberOfCalls: 5
# 滑动窗口类型,默认为基于计数的滑动窗口
slidingWindowType: TIME_BASED
# 半开状态允许的请求数
permittedNumberOfCallsInHalfOpenState: 3
# 是否自动从打开到半开
automaticTransitionFromOpenToHalfOpenEnabled: true
# 熔断器从打开到半开需要的时间
waitDurationInOpenState: 2s
recordExceptions:
- java.lang.Exception
instances:
backendA:
baseConfig: default
编写OrderController
/**
* 异常比例熔断降级
* @return
*/
@GetMapping("/citcuitBackend")
@CircuitBreaker(name = "backendA")
public String citcuitBackend(){
log.info("************ 进入方法 ***********");
String index = paymentFeignService.index();
log.info("************ 离开方法 ***********");
return index;
}
使用JMeter进行压力测试
修改语言
创建线程组
创建取样器HTTP请求
添加查看结果树
修改线程数量
修改HTTP请求参数
半开状态只有三次请求
编写降级方法
/**
* 异常比例熔断降级
* @return
*/
@GetMapping("/citcuitBackend")
@CircuitBreaker(name = "backendA")
public String citcuitTest(){
log.info("************ 进入方法 ***********");
String index = paymentFeignService.index();
log.info("************ 离开方法 ***********");
return index;
}
/**
* 服务降级方法
* @param e
* @return
*/
public String fallback(Throwable e){
e.printStackTrace();
return "客官服务繁忙,稍等一会。。。。";
}
测试降级方法
- 关闭服务提供者
- 服务消费者发起请求
产生服务降级