Sentinel
资源
通过@SentinelResource来标识需要由sentinel管理,保护的资源。对于主流框架sentinel进行了适配,所有的Web接口均为资源
规则
通过Sentinel控制台我们可以定义流量控制,熔断降级,系统保护,来访控制,热点参数等的规则,可以将其作用于资源上。
整合sentinel
官网:https://sentinelguard.io
sentinel面板下载地址:https://github.com/alibaba/Sentinel/releases
- 下载好sentinel面板
- 引入sentinel依赖
spring-cloud-starter-alibaba-sentinel- 由于所有微服务都可能会用到sentinel,那么在管理微服务的模块(services模块)中添加该依赖
- 编写yml配置文件
- 要用到sentinel的微服务都有在yml文件中添加该段
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
eager: true #让项目一启动就让该项目连上dashboard
异常处理
当请求违背规则时会抛出一个BlockException异常,而具体来分又会抛出FlowException(流量控制异常);;ParamFlowException(热点参数异常);DegradeException(熔断降级异常);AuthorityException(权限控制异常);SystemBlockException(系统保护异常)。由于资源的不同,又会又不同的异常处理机制。
web接口异常
当对web接口的访问被sentinel规则限制会抛出该异常(可以理解为作用于controller)
自定义web请求异常访问
默认情况下会使用springmvc的SentinelWebInterceptor(web拦截器),它只会使用默认的BlockExceptionHandler进行处理(返回一个页面),而实际开发中,我们需要的是返回一个json对象。
要实现该功能我们需要使用@SentinelResource注解来标注作用的资源,然后去实现BlockExceptionHandler,并将其放入到ioc容器中即可
下面这个例子会对创建订单请求进行流量控制,并且自定义返回的错误信息为json串
1.添加流控规则
我们可以在sentinel控制台中看到名为/create的资源,该资源是一个远程调用接口,用以获取商品数据
然后点击流控,对其添加流控规则为QPS,单机阈值为1.
此时如果多次发送请求则会返回一个默认的错误页面
2.自定义异常返回结果
// model模块 com.atli.common.R
// 用于定义所有响应
@Data
public class R{
private Integer code;
private String msg;
private Object data;
public static R ok(){
R r = new R();
r.setCode(200);

最低0.47元/天 解锁文章
378

被折叠的 条评论
为什么被折叠?



