速通springcloud--03Sentinel

Sentinel

资源
通过@SentinelResource来标识需要由sentinel管理,保护的资源。对于主流框架sentinel进行了适配,所有的Web接口均为资源

规则
通过Sentinel控制台我们可以定义流量控制,熔断降级,系统保护,来访控制,热点参数等的规则,可以将其作用于资源上。

整合sentinel

官网:https://sentinelguard.io
sentinel面板下载地址:https://github.com/alibaba/Sentinel/releases

  1. 下载好sentinel面板
  2. 引入sentinel依赖
    1. spring-cloud-starter-alibaba-sentinel
    2. 由于所有微服务都可能会用到sentinel,那么在管理微服务的模块(services模块)中添加该依赖
  3. 编写yml配置文件
    1. 要用到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);
        
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值