Sentionel统一异常处理
五.统一异常处理—BlockException
在上述规则测试中,当违反规则时,出来的异常信息页面不够友好和统一,我们可以通过设置统一的异常处理类,针对不同规则显示不同异常信息。
创建一个配置类,实现BlockExceptionHandler接口 @Component public class MyBlockExceptionHandler implements BlockExceptionHandler { @Override public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception { ResponseResult rs=null; if(e instanceof FlowException) rs= Response.createFailResp(-1,"接口限流了"); else if(e instanceof DegradeException) rs=Response.createFailResp(-2,"服务降级了"); else if(e instanceof ParamFlowException) rs=Response.createFailResp(-3,"参数限流了"); else if(e instanceof AuthorityException) rs=Response.createFailResp(-4,"权限规则不通过"); else if(e instanceof SystemBlockException) rs=Response.createFailResp(-5,"系统保护"); httpServletResponse.setContentType("application/json;charset=utf-8"); httpServletResponse.getWriter().write(JSON.toJSONString(rs)); } }
添加规则测试:
六 @SentinelResource注解详解
通过前面的学习,我们了解到通过Sentinel除了可以控制对Spring Mvc接口层级的控制,也可以对service层的某个方法控制,也就是说在我们实际项目开发时不仅仅限于接口,可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。
那么如何使用@SentinelResource注解灵活的定义控制资源以及如何配置控制策略。我们来系统学习一下。 1.自定义资源点
我们可以对这个资源点做限流处理 2 实现异常处理
默认情况下,Sentinel对控制资源的限流处理是直接抛出异常。设置了统一异常处理BlockExceptionHandler也会发现对非控制层的资源没有用,这样对用户交流不友好,我们需要处理一下@SentinelResource资源的异常信息。
@SentinelResource资源的异常处理有两种方式:
blockHandler:sentinel定义的失败调用或限制调用,若本次访问被限流或服务降级,则调用blockHandler指定的接口
fallback:失败调用,若本接口出现未知异常,则调用fallback指定的接口。
当两个都配置时,也就是当出现sentinel定义的异常时,调用blockHandler,出现其它异常时,调用fallback。 2.1 blockhandler 的使用
blockhandler 定义当资源内部发生了BlockException(也就是sentinel定义的失败异常或限制异常),应该走的处理逻辑。
要求:
1.当前方法的返回值和参数要和原方法一致
2.允许在参数列表的最后加入一个参数BlockException,用来接收原方法中发生的异常。
2.2 fallback的使用
要求:
1.当前方法的返回值和参数要和原方法一致
2.允许在参数列表的最后加入一个参数Throwable,用来接收原方法中发生的异常。
2.3 测试
3.怎么将异常处理放在资源类的外面
如果将所有的异常处理都放在资源类里面,会导致类很臃肿,不利于维护,外面可以将异常处理放在类外面
4.@SentinelResource的其它属性
value: Sentinel资源的名称,我们不仅可以通过url进行限流,也可以把此值作为资源名配置,一样可以限流。
entryType: 条目类型(入站或出站),默认为出站(EntryType.OUT)
resourceType: 资源的分类(类型)
blockHandler: 块异常函数的名称,默认为空
blockHandlerClass: 指定块处理方法所在的类
默认情况下, blockHandler与原始方法位于同一类中。 但是,如果某些方法共享相同的签名并打算设置相同的块处理程序,则用户可以设置存在块处理程序的类。 请注意,块处理程序方法必须是静态的。
fallback: 后备函数的名称,默认为空
defaultFallback: 默认后备方法的名称,默认为空
defaultFallback用作默认的通用后备方法。 它不应接受任何参数,并且返回类型应与原始方法兼容
fallbackClass: fallback方法所在的类(仅单个类)
默认情况下, fallback与原始方法位于同一类中。 但是,如果某些方法共享相同的签名并打算设置相同的后备,则用户可以设置存在后备功能的类。 请注意,共享的后备方法必须是静态的。
exceptionsToTrace: 异常类的列表追查,默认 Throwable
exceptionsToIgnore: 要忽略的异常类列表,默认情况下为空。 七 Sentinel整合OpenFeign实现服务降级(服务容错)
如果一个服务(服务消费者)调用了另一个服务(服务生产者),服务生产者有异常,会导致服务消费者出错,我们希望不仅仅只是显示错误,而是能启动熔断器,对服务消费者做降级(容错)处理。
那么应该怎么实现呢?
1.添加jar包
我们当前项目里已添加 org.springframework.cloud spring-cloud-starter-openfeign
2.添加配置信息
在服务消费者的配置文件中添加
3.添加降级处理类
4.在feign客户端关联对应的降级处理类
5.在服务提供者中模拟一个异常
比如 int i=1/0;
6.测试
八 Sentinel 规则持久化
Sentinel Dashboard中添加的规则是存储在内存中的,只要项目一重启规则就丢失了
我们可以将规则持久化到nacos中,在nacos中添加规则,然后同步到dashboard中.
方法如下:
1.添加jar包 com.alibaba.csp sentinel-datasource-nacos
2.在nacos配置中心添加配置文件
[ { "resource":"/goods", "limitApp":"default", "grade":1, "count":2, "strategy":0, "controlBehavior":0, "clusterMode":false } ]
注意:
配置格式:选择 json 选项
配置内容:
resource: 资源名称
limitApp: 来源应用
grade: 阈值类型,0表示线程,1表示QPS
count: 单机阈值
strategy: 流控模式,0表示直接,1表示关联,2表示链路
controlBehavior: 流控效果,0表示快速失败,1表示Warm Up,2表示排队等待
clusterMode: 是否集群
3.修改微服务配置信息,添加sentinel规则配置信息到微服务的配置文件中
4.重启服务
深入学习IO多路复用selectpollepoll实现原理作者mingguangtu,腾讯IEG后台开发工程师selectpollepoll是Linux服务器提供的三种处理高并发网络请求的IO多路复用技术,是个老生常谈又不容易弄清楚其底层
wxPython事件标识符实战wxPython系列013在wxPython事件系统中,事件是通过标识来区分的,每个事件标识在其实就是一个独一无二的整数,常见的事件标识有窗口标识,标准标识以及定制事件标识等等
人民日报金句摘抄曙光就在前头,坚持就是胜利(1月20)主题关键词教育数字化出处慕课打开教育数字化新空间金句摘抄1。工作之余,很多人都有充充电加加油的想法。慕课等在线教育的兴起,让越来越多人有了继续学习的兴趣和机会。2。慕课等在线教育,
老QQ号有多大价值?内行人一语道破满足条件,或许能换辆车引言在当今这个网络发展迅猛的时代,我们享受着互联网给我们带来的种种便利体验,网络方便了我们的生活也给我们跨越空间时间的交流提供了桥梁,现在各种互联网社交平台层出不穷。但若说到古早的
ampampquotXBB。1。5不是终点纽约一项研究显示,从发现新变异株,到感染者所占比例升至30,新冠变异株BQ。1用了26天,XBB。1。5只用了17天。2022年的最后一周,XBB。1。5在纽约迅速取代BQ。1BQ
互联网我们都是追梦人,合作共赢开创未来!中国梦是千载难逢前所未有绝无仅有的历史性特大机遇。是特殊人群,特殊的时空和特殊的经营模式,共同创造的一个民族经济大复兴的特大机遇。是民在前官在后,官民合作,民富国强,共赢共荣的特大
iPhone15Pro大概率涨价!工薪阶层别考虑中关村在线消息1月22日,据相关爆料,为了与iPhone15Plus拉开差异,iPhone15Pro的价格可能会迎来上涨,避免出现iPhone14Plus今年的情况。根据现有情况来
聊天机器人ChatGPT,是教育的毒药还是良药?哲学教授安东尼奥曼在批改论文时,读到了他所谓的全班最好的论文。写这篇论文的学生最终承认自己使用了ChatGPT。聊天机器人ChatGPT引发了人们对教育领域的担忧,但ChatGPT
为什么我觉得目前5G是骗局?因为中国终于开始触及产业方向试错的问题了。我记得袁岚峰在节目里说过,中国搞原子弹氢弹这么快,最大的便宜是知道了这两个东西是搞得成的,很多早期的可行性论证就省略了。要不然一定有人跳出
大年初一海南离岛免税购物人气旺1月22日,正值中国农历正月初一,cdf三亚国际免税城吸引众多顾客前来购物。据了解,春节假期期间,海南各免税店针对离岛旅客制定了一系列优惠活动,吸引游客入店消费。顾客在cdf三亚国
今天大年初二,祝生活蒸蒸日上,如火如兔!消费对经济具有持久拉动力,事关保障和改善民生。为释放消费潜力,促进消费持续恢复,2022年都有哪些消费措施与你我生活息息相关?中国政府网国务院客户端带你看。新的一年,祝生活蒸蒸日上
风险管理房贷还款方式,看看家庭财务负债风险识别AFFRMS培训工具测评咨询结合保险金融财务精算和数据科学完善家庭财务风险管理稳健基础上实现家庭资产收益最大化监控资产负债现金流的平衡获得消费者深度信任今天进入家庭财务负债风险识别
交广会客厅文静用心用情做好服务工作从广九直通车到粤港直通高铁的故事阿姨,我帮您拿行李。谢谢你!不客气。如果您还需要什么帮助,可以随时找我。在广州东站春运站场,一个小小的身影穿梭在旅客中间,身上携着一个小喇叭,步履匆匆,时刻关注候车室旅客候车动态,
做些别人做不到的事情来源人民日报想做好实验科学研究,应该先把科学仪器做好,掌握关键技术。20多年来,中国科学院院士中科院大连化学物理研究所研究员杨学明(见上图,中科院大连化物所供图)一直在研发先进科学
俄乌战争警示中国还需再快速发展30年,美国将束手无策?俄乌战争的爆发让俄罗斯在军事建设方面的缺失一览无余,作为世界公认的第二军事强国,却迟迟无法拿下积弱已久的乌克兰,俄罗斯的悲剧给中国提了个醒对于综合国力的提升,任何时候都不能放松。下
兔年第一个工作日,祝你今天大年初七兔年的第一个工作日觉也睡饱了酒也喝足了节也过完了好了接下来就要人间清醒了下面这9个关键词可是小编精挑细选的今天送给大家了祝大可爱小宝贝们开工大吉!animatetran
美国武器都给乌克兰,台湾怎么办?美智库弹药不够在台海打一周美国援乌升级,特朗普公然反对1月25日,随着拜登宣布向乌克兰提供31辆M1主战坦克,西方阵营对乌军援又提升到一个新的高度,美国国内围绕这一举措的争议也达到了全新的高度。很多此前反对
1997年,四川80岁老太再婚,新婚夜老伴放声痛哭60年前你嫁过我缘分究竟是不是天注定的呢?这个问题没有人能给出准确的答案。就拿爱情当中的缘分来说,有的人年少遇到挚爱,他们山盟海誓,想要地老天荒,但是缘分来得太早,让他们在人生的漫长岁月中渐渐弄丢
比烂尾楼更悲催的,是烂尾的人生!今天是正月初六,兔年的春节只剩一截尾巴了,又一个人坐着公交去乡下看望年迈的父母。街道上张灯结彩,车水马龙,游人如织,一派节日的喜庆气氛,但那都是别人的,与我无关,我只是个五味杂陈的
这一天,我真正体会到了当下的美好时光时下,我们经常听到或看到珍惜当下这样的字眼儿,但是具体到自身,能确定自己真正明白珍惜当下的含义吗?能体会到珍惜当下是一种怎样的感觉吗?能悟出珍惜当下对自己的人生有多重要吗?我一直这
都初六了,不让放鞭,难道还不让做柴火饭炊烟(汪汪)比城市的烟囱矮比工厂的浓烟白如果非要比短找找汽车的排气管故乡的炊烟你有什么资格制造雾霾大伯在屋檐下吸着旱烟大妈在院子里码着干柴旺财对干部的背影还没吠完你就猴急急从墙旮旯
人生的道路都是由心来描绘的活法活法稻盛和夫这是稻盛和夫一生思想的精髓,经验的总结,生命的感悟集大成的人生哲学。作者一生有着丰富的经历,诸多的磨难,成功的事业,到最后的出世,都蕴含着他智慧的觉悟,而活法正是作者把