自定义规则异常返回|学习笔记

简介: 快速学习自定义规则异常返回

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:自定义规则异常返回】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/684/detail/11880


自定义规则异常返回

 

内容介绍:

一、 课题引入

二、 数据填写步骤

三、 //异常处理页面

 

一.课题引入

根据规则不同,返回个性化的异常页面,通过 Sentinel 提供的 url block Handler一个接口,只要实现这个接口并实现里面的 Block 就可以拿到所有规则产生的异常,对这个异常进行判断,就知道那个规则导致的异常,通过自己的逻辑来返回对应的一个个性化界面。

 

二.数据填写步骤

示例:写 ExceptionHandlerpage 这类

复制名字到异常处理页面

②在config下面加一个 class,让它实现 url blockhandler 接下来将里面的 block 方法做出实现,就可以拿 request response 和 BlockException,这就是所有异常的分接口。

image.png

它有五个子类分别对应五个规则(子类如图)

(1)AuthorityException(授权的)

(2)DegradeException(降级的)

(3)FlowException(限流的)

(4)ParamFlowException(参数限流的)

(5)SystemBlockException(系统负载的)

③接下来通过对 BlockException 判断知道哪一种规则导致的异常接下来在图的基础上写下

if (e instanceof FlowException) {

这时候可以返回由于限流导致的异常,为了返回这个结果在封装一个

Class ResponseData{} 响应数据在这里面提供两个值一个 private int code;一个private String message;在响应数据上填上@Data

@AllArgsConstructor//这是全参构造在填一个无参构造 @NoArgsConstructor接下来就可以做异常了,

在填写 newponseData(code:-1,messagea:”接口被限流了…”)

同样接下来写 eles if(e instanceof FlowException){

再写一个降级的 }eles if(e instanceof DegradeException){

他的Data等于new ResponseData(code:-2,message:”借口被降级了…”);同样可以接着往下写。

④ 考虑如何将 newponseData(code:-1,messagea:”接口被限流了…”)返回去

首先做一个声明 ResponseData 放在外面,ResponseData=null;之后ResponseData=newponseData(code:-1,messagea:”接口被限流了…”)

ResponseData=new ResponseData(code:-2,message:”借口被降级了…’’)接下来将response写回去,可以用相应写 response.getwriter().writer(); 现在这是一个对象最好将他转成结对状再往回写,写response.getwriter().writer(JOSN.toJOSNString(responseData))注意这么写会有中文乱码的问题,为了处理乱码问题加一个reponse.setContentType(“application/Json;charset=utf-8’’);这个定义就定义好了。

⑤接下来@Component我们的容器里面,到这一步自定义异常返回页面就写完了。

⑥启动程序接下来访问message1,对他设置规则找到簇点链路找到message1设置一个流控规则发现接口被限流了,把他删掉重新降级规则规则

运行出现接口被降级了,可以根据这个返回结果去判断哪里异常了。

 

三.//异常处理页面

@component

Public class ExceptionHandlerpage implents url Block Handler {

//Block Exception 异常接口,包含sentinel 的五个异常

// Flow Exception限流异常

//Degrade Exception 降级异常

//Param Flow Exception 参数限流异常

//Authority Exception 授权异常

//System Block Exception  系统负载异常

@override

Publicvoidblock(HttpServletRequestrequest, HttpServletResponse response,BlockException e) throws IoException {

Response.setContentType(“application/json;charset=utf-8”);

ResponseData data=null;

if (e instanceof FlowException) {

data=new ResponseData(-1,”接口被限流了… ”);

} else if (e instanceof Degr adeException) {

data=new ResponseData(-2,“接口被降级了…”);

}

response.getwriter().write(JSON.toJSONString(data));

}

}

@Data

@AllArgsConstructor//全参构造

@NoArgsConstructor

//无参构造

Class ResponseData {

Private int code;

Private String message;

}

相关文章
|
缓存 数据格式
实现LRU缓存的三种方式(建议收藏)
LRU全称为Least Recently Used,即最近使用的。针对的是在有限的内存空间内,只缓存最近使用的数据(即get和set的数据),超过有限内存空间的数据将会被删除。这个在面试题中也是常会被问到的内容,接下来就看看怎么来实现。
2157 0
实现LRU缓存的三种方式(建议收藏)
|
NoSQL 数据可视化 Redis
Datagrip2020连接redis,可视化插件安装
Datagrip2020连接redis,可视化插件安装
1398 0
|
7月前
|
网络协议 算法 物联网
Go语言的WebSocket与实时通信
本文介绍了 WebSocket 技术及其在 Go 语言中的实现。WebSocket 是一种基于 TCP 的协议,支持客户端与服务器间的持久连接和实时通信,相比传统 HTTP 更高效。文章详细讲解了 WebSocket 的核心概念、Go 语言中的相关库(如 `gorilla/websocket`),以及其实现步骤和应用场景。通过代码示例展示了如何构建 WebSocket 服务器和客户端,并探讨了其在聊天应用、实时更新、游戏和物联网等领域的实际用途。此外,还推荐了相关工具和学习资源,帮助开发者更好地掌握这一技术。
283 3
|
监控 druid
druid 连接池监控报错 Sorry, you are not permitted to view this page.
druid 连接池监控报错 Sorry, you are not permitted to view this page.
2495 0
|
8月前
|
Arthas 运维 监控
Arthas stack (输出当前方法被调用的调用路径)
Arthas stack (输出当前方法被调用的调用路径)
454 37
|
资源调度 前端开发 JavaScript
第十章(应用场景篇) Single-SPA微前端架构深度解析与实践教程
第十章(应用场景篇) Single-SPA微前端架构深度解析与实践教程
735 0
|
监控 Java Nacos
微服务保护--Sentinel
微服务保护--Sentinel
408 0
|
IDE Java Maven
Spring Boot启动失败问题:hile scanning for the next token found character '@'
Spring Boot启动失败问题:hile scanning for the next token found character '@'
895 0
|
数据安全/隐私保护 Docker Sentinel
docker安装Sentinel
docker安装Sentinel
896 0