2020-12-26

SpringBoot进阶教程(六十八)Sentinel实现限流降级

请叫我头头哥前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Sentinel。Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。历次在双十一大促等核心场景的应用更是使其大放异彩。今天就来介绍介绍Alibaba sentinel。

前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Sentinel。

Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。历次在双十一大促等核心场景的应用更是使其大放异彩。今天就来介绍介绍Alibaba sentinel。


vsentinel主要特性

SpringBoot进阶教程(六十八)Sentinel实现限流降级

图片来源于网络,侵删。

vLinux sentinel安装与部署

1.1 下载sentinel_dashboardjar包

可以在https://github.com/alibaba/Sentinel/releases找到合适的版本,当前最新版本sentinel-dashboard-1.8.0.jar下载

1.1 部署

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

-Dserver.port=8080 代表看板项目的端口号,-Dcsp.sentinel.dashboard.server=localhost:8858代表本dashboard服务将会被注册,-Dproject.name=sentinel-dashboard代表本身服务的项目名称。访问localhost:8858;输入用户名,密码(用户名/密码默认值sentinel)。

也可以自定义用户名密码,在启动命令加上 -Dsentinel.dashboard.auth.username=toutou -Dsentinel.dashboard.auth.password=123456

vdocker sentinel安装与部署

我在虚拟机装了docker,所以下文中实例中讲解的部分,是基于docker的sentinel。若未安装docker的朋友可以看看这篇文章Docker从安装部署到Hello World。

2.1 拉取sentinel镜像

docker pull bladex/sentinel-dashboard:1.8.0

SpringBoot进阶教程(六十八)Sentinel实现限流降级

2.2 创建容器

docker run --name sentinel -d -p 8858:8858 bladex/sentinel-dashboard:1.8.0

2.3 启动容器

docker start sentinel

v验证安装效果

访问

SpringBoot进阶教程(六十八)Sentinel实现限流降级

上文已经介绍了,使用用户名/密码默认值sentinel登录。

SpringBoot进阶教程(六十八)Sentinel实现限流降级

默认会有一个sentinel-dashboard。

vspringboot整合sentinel

3.1 添加依赖pom.

  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>   <version>0.9.0.RELEASE</version>  </dependency>

3.2 添加配置application.properties

spring.cloud.sentinel.transport.port=9719spring.cloud.sentinel.transport.dashboard=toutou.com:8858

3.3 添加兜底方法

/** * @author toutou * @date by 2020/12 * @des https://www.cnblogs.com/toutou */@Slf4jpublic class BlockHandlerUtil { public Result message(BlockException blockExe){  log.info(blockExe.toString());  return Result.setErrorResult(555, "网络拥堵,请稍后再试。"); }}

3.4 添加controller

/** * @author toutou * @date by 2020/12 * @des https://www.cnblogs.com/toutou */@Slf4j@RestControllerpublic class IndexController { @GetMapping("/hello") @SentinelResource(value="hello",blockHandlerClass = BlockHandlerUtil.class, blockHandler = "message") public Result hello(@RequestParam(value = "name",defaultValue = "toutou",required = false)String name){  return Result.setSuccessResult("hello " + name); }}

3.5 @SentinelResource注解

@SentinelResource可以涵盖Sentinel的大部分应用场景,所以搞懂@SentinelResource就能更好的使用Sentinel。

属性名是否必填说明
value资源名称 。(必填项,需要通过 value 值找到对应的规则进行配置)
entryTypeentry类型,标记流量的方向,取值IN/OUT,默认是OUT
blockHandler处理BlockException的函数名称(可以理解为对Sentinel的配置进行方法兜底)。函数要求:
1.必须是 public 修饰
2.返回类型与原方法一致
3. 参数类型需要和原方法相匹配,并在最后加 BlockException 类型的参数。
4. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 blockHandlerClass ,并指定blockHandlerClass里面的方法。
blockHandlerClass 存放blockHandler的类
对应的处理函数必须 public static 修饰,否则无法解析,其他要求:同blockHandler。
fallback用于在抛出异常的时候提供fallback处理逻辑(可以理解为对Java异常情况方法兜底)
fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。函数要求:
1.返回类型与原方法一致
2.参数类型需要和原方法相匹配,Sentinel 1.6开始,也可在方法最后加 Throwable 类型的参数。
3.默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定fallbackClass里面的方法。
fallbackClass存放fallback的类
对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
defaultFallback用于通用的 fallback 逻辑
默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求:
1.返回类型与原方法一致
2.方法参数列表为空,或者有一个 Throwable 类型的参数。
3.默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
exceptionsToIgnore指定排除掉哪些异常。
排除的异常不会计入异常统计,也不会进入fallback逻辑,而是原样抛出。
exceptionsToTrace需要trace的异常

vSentinel 控制台

用浏览器打 控制台相关的可配置菜单和可视化界面的参数就会对应的展示出来。

SpringBoot进阶教程(六十八)Sentinel实现限流降级

4.1 添加流控规则

SpringBoot进阶教程(六十八)Sentinel实现限流降级

在"簇点链路"中可以添加各种规则,比如我们添加的"流控",添加以后便可以在"流控规则"中查看。

SpringBoot进阶教程(六十八)Sentinel实现限流降级

4.2 ab test测试

使用ab test测试工具测试下流控规则, ab -n 30 -c 5 。如果ab test不会用的,可以看看这篇文章ab test压力测试。

SpringBoot进阶教程(六十八)Sentinel实现限流降级

上图是Sentinel 控制台中的实时监控,可以看出流控规则已经生效。同时我们用浏览器访 src="https://img2020.cnblogs.com/blog/506684/202012/506684-20201211194249255-1858297011.png" alt="SpringBoot进阶教程(六十八)Sentinel实现限流降级" loading="lazy">

4.3 降级规则

SpringBoot进阶教程(六十八)Sentinel实现限流降级

参数说明:

SpringBoot进阶教程(六十八)Sentinel实现限流降级

 

  • 面向云原生微服务的高可用流控防护组件
  • Docker部署sentinel
  • Sentinel实现降级限流熔断
  • 来聊聊@SentinelResource的用法

v源码地址

https://github.com/toutouge/javademosecond/tree/master/hellolearn


作  者:请叫我头头哥
出  处
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!










原文转载:http://www.shaoqun.com/a/504113.html

跨境电商:https://www.ikjzd.com/

史泰博:https://www.ikjzd.com/w/2112

美菜:https://www.ikjzd.com/w/1874


前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Sentinel。Sentinel是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。历次在双十一大
rfq:rfq
执御:执御
2020五一七盘仙谷门票价格?新昌七盘仙谷风景区五一门票多:2020五一七盘仙谷门票价格?新昌七盘仙谷风景区五一门票多
亚马逊运营的自述:我月销百万,底薪只涨了100块:亚马逊运营的自述:我月销百万,底薪只涨了100块
梅州八乡山大峡谷游玩路线?八乡山大峡谷怎么玩?:梅州八乡山大峡谷游玩路线?八乡山大峡谷怎么玩?

No comments:

Post a Comment