分布式限流框架Sentinel基本引用
Sentinel的基本引用
使用Sentinel的核心库实现限流,主要分以下几个步骤:
- 定义资源
- 定义限流规则
- 校验规则是否生效
Sentinel实现限流
引入Sentinel核心库
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.2</version> </dependency> 复制代码
定义普通业务方法
private static void doLimiting(){ try(Entry limiting = SphU.entry("doLimiting")){ log.info("{}-doLimiting",System.currentTimeMillis()); }catch (BlockException e){ //处理被流量控制的逻辑 } } 复制代码
在doLimiting方法中,通过使用Sentinel中的SphU.entry("doLimiting")定义一个资源来实现流量控制逻辑,表示当请求进入doLimiting方法时,需要进行限流判断,如果抛出BlockException异常,则表示触发了限流,doLimiting可定义为方法名称、接口名称或者其他唯一标识
对保护资源定义限流规则
private static void initFlowRules(){ final List<FlowRule> flowRules = new ArrayList<>(); final FlowRule flowRule = new FlowRule(); flowRule.setResource("doLimiting"); flowRule.setCount(20); flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS); flowRules.add(flowRule); FlowRuleManager.loadRules(flowRules); } 复制代码
针对doLimiting资源,通过initFlowRules设置限流规则,部分参数含义如下:
- grade:限流阈值类型,并发线程数模式(0)或者QPS模式(1)
- resource:设置需要保护资源名,这个资源名称必须和SphU.entry中使用的名称一样
- count:限流阈值
对于doLimiting方法,每秒最多允许通过20个请求,就是QPS为20
验证doLImiting方法的限流情况
public static void main(String[] args) { initFlowRules(); while(true){ doLimiting(); } } 复制代码
启动main方法,在{USER_HOME}\logs\csp\{包名-类名}--metrics.log.yyyy-MM-dd文件查看以下日志
1627357800000|2021-07-27 11:50:00|doLimiting|20|6740|20|0|0|0|0|0 1627357801000|2021-07-27 11:50:01|doLimiting|20|7372|20|0|0|0|0|0 1627357802000|2021-07-27 11:50:02|doLimiting|20|7093|20|0|0|0|0|0 1627357803000|2021-07-27 11:50:03|doLimiting|20|6714|20|0|0|0|0|0 1627357804000|2021-07-27 11:50:04|doLimiting|20|6412|20|0|0|0|0|0 1627357805000|2021-07-27 11:50:05|doLimiting|20|7296|20|0|0|0|0|0 1627357806000|2021-07-27 11:50:06|doLimiting|20|7606|20|0|0|0|0|0 1627357807000|2021-07-27 11:50:07|doLimiting|20|7033|20|0|0|0|0|0 1627357808000|2021-07-27 11:50:08|doLimiting|20|6489|20|0|0|0|0|0 复制代码
每秒稳定输出20次,和规则中设置的值一致,而被拒绝的请求每秒最高达7606次
日志对应字段具体含义
timestamp|yyyy-MM-dd HH:mm:ss|resource|passQPS|blockQPS|successQPS|exceptionQPS|rt|occupiedPassQPS |concurrency|classification passQPS 通过的请求数 blockQPS 被阻止的请求数 successQPS 成功执行完成的请求数 exceptionQPS 用户自定义的异常 rt 平均响应时长 occupiedPassQPS 优先通过的请求 classification 资源类型
本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。