【八】SpringCloud Alibaba之整合Sentinel(实现流量控制3)

简介: 【八】SpringCloud Alibaba之整合Sentinel(实现流量控制3)

一、基于SentinelResource注解

目前的代码结构:

框选部分为本章新增和修改的类。

1、新增一个处理sentinel自定义返回的类,编写自定义返回方法,如下:

2、 新增测试接口

使用sentinel的注解sentinelresource,他有如下参数:

value:定义sentinel的资源名称。ps:一定要注意,sentinelresource的名字不要相同,controller下面的方法,sentinel他会默认加载成sentinel资源,名字为mapping映射注解的值,所以若在方法上新增一个sentinelresource注解,一定记得不能重名,否则会失效。!!!!!)。

entryType:资源调用的流量类型,默认是出口流量(OUT),可以设置为入口流量(IN),注意系统规则只对 IN 生效(没用过)。

resourceType:资源类型,默认是0,(1:web,2:prc,3:gateway,4:sql)。

blockHandler:自定义流控处理方法的方法名(只能处理BlockException异常)。

blockHandlerClass:自定义流控处理方法的所在的类名。

allback:可以处理所有类型的异常,值是处理异常的方法名,配合fallbackClass使用。

defaultFallback:设置默认的异常处理,值是处理异常的方法名,配合fallbackClass使用,若同时设置了allback的值,则不会走默认的defaultfallback指定的方法名所在方法,而是走allback设置的方法。

fallbackClass:配合defaultFallback或者allback使用,值为处理异常的方法所在的类的类名。

exceptionsToTrace:sentinel默认会有可以处理的异常类型但不是所有都能处理,若需要处理其他异常,通过该属性设置异常类型的值,进行一个类似追加的操作,追加sentinel可以操作的异常列表数据。

exceptionsToIgnore:值为异常类,表示指定的异常类不会走自定义的异常处理方法(allback或者defaultfallback或者blockhandler),而是走他自己默认的处理。

3、新增流控规则

ps:流控规则加到sentinelresouce注解设置的value值对应的资源上,而不是加到mapping映射注解名称自动生成的sentinel资源上,如上加到test33上而不是test3上!!。

4、演示(只使用了blockHandler和blockHandlerClass属性)

不再是返回默认的Blocked by Sentinel (flow limiting)。

二、全局处理

1、BlockException异常类

先了解一下BlockException:他是Sentinel里面的一个父异常类,集成了Exception异常类,有多个子类,FlowException(流控),ParamFlowException(热点),DegradeException(熔断),AuthorityException(授权),SystemBlockException(系统),对应了Sentinel功能列表的各个功能对应的处理依据异常。一旦超过设定的值,就会触发sentinel机制(例如:流控效果),都会抛出一个BlockException。所以,可以通过重写sentinel提供的BlockException异常的BlockExceptionHandler接口或者UrlBlockHandler接口去重写BlockException抛出前的处理逻辑,进行针对BlockException异常的细分化的全局异常处理。

2、自定义全局异常类处理BlockException

这里需要提到一点,此处我使用的是2.1.1版本的sentinel,所以通过实现UrlBlockHandler的方式。

alibaba sentinel版本 全局异常实现方式
2.2.0以下版本 需要实现UrlBlockHandler接口
2.2.0以上 实现 BlockExceptionHandler接口

实现(新增配置文件):

注意:加上Component注解,重写UrlBlockHandler接口的blocked方法。

3、演示

测试test2接口资源,设置流控规则,由于是流控,所以会在产生流控时,new一个 FlowException异常出来,上面有提到,所以会走

这一步,启动jmeter的测试计划,查看结果,如下:

http请求返回指定的500错误码, 相应的信息为“被限流”,全局异常处理设置成功。

 

2022.3.21修改:使用全局处理不能使用sentinelresource注解,否则失效。

目录
相关文章
|
14天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
|
2月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
2月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
2月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
26天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
255 7
|
2月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
343 13
Spring Cloud Alibaba:一站式微服务解决方案
|
6月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
115 1
|
8月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
197 3
|
4月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?