解决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: false3.添加上下文过滤器
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过滤器

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
