文章目录
一。介绍
Sentinel
管控台结合@SentinelResource
注解来实现服务限流以及熔断降级功能。
blockHandler
只负责sentinel控制台配置违规fallback
只负责业务异常
二。只配置blockHandler
1.单个blockHandler限流降级处理方法配置
这里主要介绍如何在控制器中自定义单个或者多个限流降级处理方法。
控制器示例代码如下:
sentinel配置流控规则如下:
(注:狭义来说,若该资源名不带"/"
,则说明的该资源名为@SentinelResource
中value
属性的值)
当我们一秒一次点击时,不触发限流降级:
当我们快速点击刷新时,超过流控阈值,触发限流降级,调用自定义限流降级方法:
2.blockHandlerClass限流降级处理类配置
为了提高代码的可读性以及解耦,我们将自定义的限流降级方法专门写入到一个限流降级类中,需要时再进行调用。
限流降级处理类代码如下:
(注:所有的方法均为static静态方法,参数必须带上BlockException exception,否则找不到相应方法)
package com.example.sentinel_8401.blockHandlerClass;
import com.alibaba.csp.sentinel.slots.block.BlockException;
/**
* @Description:sentinel限流降级处理类
* 所有的方法均为static静态方法,参数必须带上BlockException exception,否则找不到相应方法
* @Author :zks
* @Date :14:12 2021/2/2
*/
public class BlockHandler {
public static String blockHandlerA(BlockException exception){
return "这是第一个限流降级方法";
}
public static String blockHandlerB(BlockException exception){
return "这是第二个限流降级方法";
}
}
控制器示例代码如下:
sentinel配置流控规则分别如下:
当我们一秒一次点击时,不触发限流降级:
当我们快速点击刷新时,超过流控阈值,触发限流降级,调用自定义限流降级方法:
三。只配置fallback
1.单个fallback熔断降级处理方法配置
这里主要介绍如何在控制器中自定义单个或者多个熔断降级处理方法。
控制器示例代码如下:
当我们调用接口,接口后台异常,触发熔断降级,调用自定义熔断降级方法:
2.blockHandlerClass限流降级处理类配置
为了提高代码的可读性以及解耦,我们将自定义的熔断降级方法专门写入到一个熔断降级类中,需要时再进行调用。
熔断降级处理类代码如下:
package com.example.sentinel_8401.fallback;
import com.alibaba.csp.sentinel.slots.block.BlockException;
/**
* @Description:sentinel熔断降级处理类
* @Author :zks
* @Date :16:17 2021/2/2
*/
public class Fallback {
public static String fallbackA(){
return "这是第一个熔断降级方法";
}
public static String fallbackB(){
return "这是第二个熔断降级方法";
}
}
控制器示例代码如下:
当我们调用接口,接口后台异常,触发熔断降级,调用自定义熔断降级类中的方法:
四。blockHandler和fallback都配置
1.控制器代码示例如下:
2.配置sentinel流控规则:
3.当测试一秒点击一次没有超过流控阈值时,一直调用自定义熔断降级方法:
4.当测试快速点击超过流控阈值时,一直调用自定义限流降级方法: