Sentinel 的限流操作是在 前几篇相关博文的代码基础上 修改的!!!!!
https://blog.csdn.net/lettuce_/article/details/102568573
限流:
当我们设计了一个函数,准备上线,这时候这个函数会消耗一些资源,处理上限是1秒服务3000个QPS,但如果实际情况遇到高于3000的QPS该如何解决呢?Sentinel提供了两种流量统计方式,一种是统计并发线程数,另外一种则是统计 QPS,当并发线程数超出某个设定的阀值,新的请求会被立即拒绝,当QPS超出某个设定的阀值,系统可以通过直接拒绝、冷启动、匀速器三种方式来应对,从而起流量控制的作用。
基本概念:
资源Resource:可以是任意对象,一个字符串、一个方法,一个类对象;
规则Rule:需要如何限制或者降级,比如按照“QPS/失败比率”做出相应的处理;
入口Entry:每次资源调用都会创建一个Entry对象,Entry 创建的时候,同时也会创建一系列功能插槽
(slot chain),链里面的slot各司其职,比如其中的FlowSlot 则用于根据预设的限流规则
以及前面 slot 统计的状态,来进行流量控制,DegradeSlot 则通过统计信息以及预设的规则,来
做熔断降级;AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
操作:
1. 添加 jar包依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
有些博客说 引入许多依赖:
但这些 使用 spring-cloud-starter-alibaba-sentinel 一个就可以引入全部
2. 修改配置文件
和上一篇博文的配置文件一样,具体可查询上一篇博文
3. 限流方式
3.1 使用 抛异常方式:
try (Entry entry=SphU.entry("resourceName")){
//被保护的业务逻辑代码块(资源)
//do something here
}catch(BlockException e){
//阻止资源访问
//相关限流降级操作
}finally{