赞
踩
限流规则配置的方式有两种
a 直接在代码中编写
b 通过sentinel的web控制台配置
1 引用maven依赖
- <!-- sentinel核心依赖 -->
- <dependency>
- <groupId>com.alibaba.csp</groupId>
- <artifactId>sentinel-core</artifactId>
- <version>1.7.2</version>
- </dependency>
-
- <!-- 本应用接入到sentinel控制台的依赖 -->
- <dependency>
- <groupId>com.alibaba.csp</groupId>
- <artifactId>sentinel-transport-simple-http</artifactId>
- <version>1.7.2</version>
- </dependency>
2 代码方式编写限流规则,并调用规则做限流
- package cn.jiqistudy.boot_1test.Control;
- import cn.jiqistudy.boot_1test.pojo.Yonghu;
- import com.alibaba.csp.sentinel.Entry;
- import com.alibaba.csp.sentinel.SphU;
- 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.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import javax.annotation.PostConstruct;
- import javax.servlet.http.HttpServletRequest;
- import java.util.ArrayList;
-
- @RestController
- public class test_2 {
-
- @RequestMapping(value = "/getuser")
- public Object fangfa1(HttpServletRequest request) {
- /*
- 加载限流规则,此为jdk8后的写法,try()中是 资源 实现了 自动关闭接口AutoCloseable
- */
- try (Entry ziyuan_1 = SphU.entry("ziyuan_1")) {
- //被保护的资源
- Yonghu user_1 = new Yonghu(1, "zhangshan_" + request.getSession().getId(), "男", 23, "湖南");
- return user_1;
- } catch (Exception e) {
- //被限流或被降级的操作处理
- e.printStackTrace();
- return "系统繁忙,请稍候";
- }
- }
-
- /*
- 定义限流规则
- 在构造函数执行之后执行
- */
- @PostConstruct
- public void initFlowRules() {
- //存放限流规则的集合
- ArrayList<FlowRule> flowRules = new ArrayList<>();
-
- //限流规则
- FlowRule flowRule = new FlowRule();
- //定义资源,对哪个资源起作用
- flowRule.setResource("ziyuan_1");
- //定义限流规则类型,这里为QPS
- flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
- //定义QPS第秒能通过的请求的个数
- flowRule.setCount(2);
- //添加到集合中
- flowRules.add(flowRule);
-
- //加载限流规则
- FlowRuleManager.loadRules(flowRules);
- }
-
- }
3 sentinel控制台的搭建,就是个springboot jar包,直接启动就可以了,这里以docker的方式安装,可查看以下博文
使用Docker的方式安装Sentinel-Web控制台_在docker中安装sentinel_小哇666的博客-CSDN博客
4 在程序的启动配置中添加如下参数,设置连接到 sentinel控制台
-Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=application_1
参数含义分别是sentinel控制台的地址,和在sentinel控制台中显示的应用的名称
5 开始测试,访问 http://localhost:8089/getuser
慢慢刷新,可正常访问,如果访问非常频繁,就会被限流,显示 "系统繁忙...."
6 查看sentinel控制台,用户和密码默认都是sentinel
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。