解决Sentinel链路模式规则无效问题
作者:后会无期77
本文介绍了如何在Spring Cloud Alibaba项目中使用Sentinel链路流控规则,并解决规则不生效的问题,通过关闭Sentinel过滤器,可以避免重复统计请求
前言
如何使用Sentinel链路流控规则?
如何解决链路模式规则不生效?
解决方案
当前项目的版本信息
- SpringBoot 版本2.3.2.RELEASE
- spring-cloud版本Hoxton.SR8
- spring-cloud-alibaba版本2.2.5.RELEASE
1.引入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-web-servlet</artifactId> </dependency>
2.关闭sentinel的过滤器
(如果不设置或者不关闭,会出现重复统计问题)
spring: cloud: sentinel: filter: enabled: false
3.添加上下文过滤器
import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FilterContextConfig { @Bean public FilterRegistrationBean sentinelFilterRegistration() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new CommonFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.addInitParameter(CommonFilter.WEB_CONTEXT_UNIFY, "false"); registrationBean.setName("sentinelFilter"); registrationBean.setOrder(1); return registrationBean; } }
4.编写测试代码
5.启动服务器
请求一下上面编辑的两个接口,查看sentinel-dashboard控制台,显示出两条链路
6.编写链路规则,并保存
下图表示链路/hello1对findById这个资源的访问为每秒1次。
7.请求/hello1这个接口
频繁刷新,会出现失败。而频繁请求/hello2这条链路则不会失败。
问题
如果不关闭sentinel过滤器会发生什么?
发送一次请求,sentinel就会统计两次请求。
所以请注意关闭sentinel过滤器
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。