本篇文章分析的是Resilience4j
插件,Resilience4J
是Spring Cloud Gateway
推荐的容错方案,它是一个轻量级的容错库。它可以提供熔断和限流的功能。
操作前准备:启动shenyu-admin
,shenyu
网关,shenyu-examples-http
测试用例。
Soul
网关最近换名字了,新的名字叫ShenYu
,所以文章中可能出现书写不一致的地方。
Resilience4j 功能演示
要在shenyu
网关使用Resilience4j
插件,需要引入依赖:
<!-- shenyu resilience4j plugin start-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>shenyu-spring-boot-starter-plugin-resilience4j</artifactId>
<version>${project.version}</version>
</dependency>
<!-- shenyu resilience4j plugin end-->
然后需要在shenyu-admin
中依次开启插件,添加选择器,添加规则:
规则字段解析:
limitRefreshPeriod
: 刷新令牌的时间间隔,单位ms,默认值:500。limitForPeriod
: 每次刷新令牌的数量,默认值:50。timeoutDurationRate
: 等待获取令牌的超时时间,单位ms,默认值:5000。circuitEnable
: 是否开启熔断,0:关闭,1:开启,默认值:0。timeoutDuration
: 熔断超时时间,单位ms,默认值:30000。fallbackUri
: 降级处理的uri
。slidingWindowSize
: 滑动窗口大小,默认值:100。slidingWindowType
: 滑动窗口类型,0:基于计数,1:基于时间,默认值:0。minimumNumberOfCalls
: 开启熔断的最小请求数,超过这个请求数才开启熔断统计,默认值:100。waitIntervalInOpen
: 熔断器开启持续时间,单位ms,默认值:10。bufferSizeInHalfOpen
: 半开状态下的环形缓冲区大小,必须达到此数量才会计算失败率,默认值:10。failureRateThreshold
:错误率百分比,达到这个阈值,熔断器才会开启,默认值50。
上述是默认参数,在插件中还有参数校验逻辑,如果参数值小于默认值,会直接赋值默认值,因此方便测试效果直接修改源码的配置 : 每次刷新令牌的数量为2 ,刷新令牌的时间间隔为1s
,超时时间为1s
。
public void checkData(final Resilience4JHandle resilience4JHandle) {
resilience4JHandle.setTimeoutDurationRate(Math.max(resilience4JHandle.getTimeoutDurationRate(), Constants.TIMEOUT_DURATION_RATE));
// 刷新令牌的时间间隔为1s
resilience4JHandle.setLimitRefreshPeriod(1000);
// 每次刷新令牌的数量为2
resilience4JHandle.setLimitForPeriod(2);
resilience4JHandle.setCircuitEnable(Math.max(resilience4JHandle.getCircuitEnable(), Constants.CIRCUIT_ENABLE));
// 超时时间为1s
resilience4JHandle.setTimeoutDuration(1000);
resilience4JHandle.setFallbackUri(!"0".equals(resilience4JHandle.getFallbackUri()) ? resilience4JHandle.getFallbackUri() : ""