Soul源码阅读系列(十三)Resilience4j插件

本文详细介绍了Soul框架中Resilience4j插件的使用,包括功能演示、限流与熔断测试。通过配置参数进行限流控制,测试显示限流效果显著。同时,文章探讨了Resilience4j的熔断和限流原理,展示了其在处理高并发和系统保护上的作用。
摘要由CSDN通过智能技术生成

本篇文章分析的是Resilience4j插件,Resilience4JSpring Cloud Gateway推荐的容错方案,它是一个轻量级的容错库。它可以提供熔断和限流的功能。

操作前准备:启动shenyu-adminshenyu网关,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() : ""
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值