Sentinel本地应用流控降级实现分为三步:
- 创建本地应用
- 搭建本地Sentinel控制台
- 本地应用接入本地Sentinel控制台
1 本地应用创建
整体流程分析
- 创建springboot项目
- 在项目的pom.xml文件中引入sentinel-core的依赖坐标
- 创建TestController,定义使用限流规则
- 运行测试
具体流程
1.创建springboot项目,名称为sentinel_quick_start
2.在项目的pom.xml文件中引入sentinel-core的依赖坐标
<!--sentinel核心依赖-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.7.2</version>
</dependency>
单元测试我们不需要,所以将单元测试的依赖坐标和单元测试类删除。
3.创建TestController,定义使用限流规则
这里我们定义OPS类型的限流规则,每秒可接受的请求最多为2个,超过则返回给页面“系统繁忙,请稍候”,不超过则返回给页面“Hello Sentinel!”。
package com.example.demo.controller;
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
@RestController
public class TestController {
@GetMapping("hello")
public String hello(){
//1.进行限流控制
try (Entry entry = SphU.entry("Hello")){//限流入口
return "Hello Sentinel!";//被保护的资源
} catch (BlockException e) {
e.printStackTrace();
return "系统繁忙,请稍候";//被限流或者降级的处理
}
}
/**
* 定义限流规则
* @PostConstruct :在构造函数执行完毕后执行
*/
@PostConstruct
public void initFlowRules(){
//1.创建存放限流规则的集合
List<FlowRule> rules = new ArrayList<FlowRule>();
//2.创建限流规则
FlowRule rule = new FlowRule();
//定义资源
rule.setResource("Hello");
//定义限流规则类型,RuleConstant.FLOW_GRADE_QPS:OPS类型
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
//定义OPS每秒最多只能通过的请求个数
rule.setCount(2);
//将限流规则添加到集合中
rules.add(rule);
//3.加载限流规则
FlowRuleManager.loadRules(rules);
}
}
4.运行测试
通过浏览器访问http://localhost:8080/hello,慢速刷新,则持续显示”Hello Sentinel”;快速刷新则会交替出现”Hello Sentinel”和“系统繁忙,请稍候”。这说明对“Hello"资源限流成功。我们还可以通过查看日志获取限流详情,日志文件的位置可以在控制台找到(图中红框处)。
在该目录下找到com-itheima-sentinel-sentinel_quick_start-SentinelQuickStartApplication-metrics.log.yyyy-MM-dd文件,查看该文件内容如下所示:
2 本地Sentinel控制台搭建
Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、实时监控(单机和集群),规则管理和推送的功能。
本地控制台搭建步骤
1.下载Sentinel控制台jar包
下载地址:https://github.com/alibaba/Sentinel/releases/download/1.7.2/sentinel-dashboard-1.7.2.jar
2.启动Sentinel控制台
启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。
使用如下命令启动控制台:
java -Dserver.port=9000 -jar sentinel-dashboard-1.7.2.jar
3.访问Sentinel控制台
通过浏览器打开http://localhost:9000/即可访问Sentinel控制台,默认用户名和密码都是sentinel
但是此时本地应用还没有接入到Sentinel控制台进行管理,所以接下来就要将本地应用接入到Sentinel控制台。
3 应用接入控制台
本地应用是以客户端的身份来接入控制台,具体步骤如下:
1.在本地应用的pom.xml文件中引入依赖
<!--本地应用接入本地控制台的依赖-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.7.2</version>
</dependency>