Spring-Clould-Alibaba-Sentinel

1.环境准备

父工程pom

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>com.alibaba.cloudgroupId>
			<artifactId>spring-cloud-alibaba-dependenciesartifactId>
			<version>2.2.1.RELEASEversion>
			<type>pomtype>
			<scope>importscope>
		dependency>
	dependencies>
dependencyManagement>

子工程pom

<dependency>
	<groupId>com.alibaba.cloudgroupId>
	<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>

2.Sentinel Dashboard

2.1下载

You can download the latest Sentinel Dashboard jar from the release page.

2.2启动

使用java启动命令,默认端口号8080

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

3.应用纳入

3.1服务配置

spring:
  cloud:
    sentinel:
      eager: true
      auth:
        enabled: true
        username: sentinel
        password: sentinel
      transport:
        dashboard: 127.0.0.1:8088

也可以通过添加VM配置启动服务

-Dproject.name=nacos-provider -Dcsp.sentinel.dashboard.server=127.0.0.1:8088

Spring-Clould-Alibaba-Sentinel_第1张图片

3.2限流

流量控制规则

Field 说明 默认值
resource 资源名,资源名是限流规则的作用对象
count 限流阈值
grade 限流阈值类型,QPS 模式(1)或并发线程数模式(0) QPS 模式
limitApp 流控针对的调用来源 default,代表不区分调用来源
strategy 调用关系限流策略:直接、链路、关联 根据资源本身(直接)
controlBehavior 流控效果(直接拒绝/WarmUp/匀速+排队等待),不支持按调用关系限流 直接拒绝
clusterMode 是否集群限流

Spring-Clould-Alibaba-Sentinel_第2张图片
通过代码进行演示
配置类:

@Configuration
public class FlowConfig {
	
	private String LIMIT_KEY = "QPS1";
	
	// 初始限流流规则
	@PostConstruct
	public void inintFlowQpsRule() {
		List<FlowRule> rules = new ArrayList<FlowRule>();
		FlowRule flowRule = new FlowRule();
		// 限流的资源
		flowRule.setResource(LIMIT_KEY);
		// 限流规则
		flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
		// 设置并发数2(1s只能有2个请求进来)
		flowRule.setCount(2);
		// 应用来源(隔离用)
		flowRule.setLimitApp("default");
		rules.add(flowRule);
		
		FlowRuleManager.loadRules(rules);
	}

}

服务:

@Override
// @SentinelResource(value = "getInfo")
public String getInfo() {
	Entry entry = null;
	try {
		// sentinel获取许可的工具类
		entry = SphU.entry("QPS1");
	} catch (BlockException e) {
		log.warn("当前访问人数过多,请稍后再试");
		return "当前访问人数过多,请稍后再试";
	} finally {
		if (entry != null) {
			entry.exit();
		}
	}
	return "return info success";
}

3.3降级

熔断降级规则

Field 说明 默认值
resource 资源名,即规则的作用对象
count 阈值
grade 熔断策略,支持秒级 RT/秒级异常比例/分钟级异常数 秒级平均 RT
timeWindow 降级的时间,单位为 s
rtSlowRequestAmount RT 模式下 1 秒内连续多少个请求的平均 RT 超出阈值方可触发熔断(1.7.0 引入) 5
minRequestAmount 异常熔断的触发最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入) 5

Spring-Clould-Alibaba-Sentinel_第3张图片
服务响应超过1000m后在接下来的3s内进行熔断

Spring-Clould-Alibaba-Sentinel_第4张图片
通过下图可进行查看

Spring-Clould-Alibaba-Sentinel_第5张图片

你可能感兴趣的:(Spring-Clould-Alibaba-Sentinel)