sentinel1.8自定义错误信息

Posted lovoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sentinel1.8自定义错误信息相关的知识,希望对你有一定的参考价值。

一、简介

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 具有以下特性:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

二、引入项目

  <dependencies>
 		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  </dependencies>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            <dependency>-->
<!--                <groupId>com.alibaba.cloud</groupId>-->
<!--                <artifactId>aliyun-spring-boot-dependencies</artifactId>-->
<!--                <version>1.0.0</version>-->
<!--                <type>pom</type>-->
<!--                <scope>import</scope>-->
<!--            </dependency>-->
        </dependencies>
    </dependencyManagement>

三、配置

localhost:8333 为sentinul控制台地址

spring: 
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    sentinel:
      transport:
        #配置sentinel dashboard地址
        dashboard: localhost:8333
        #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口
        port: 8719

四、错误提示统一处理

在sentinel进行流量管理控制进,需要统一处理返回异常信息,在1.8版本前都是实现UrlBlockHandler这个接口中的blocked方法。在sentinel 1.8版本时候并没有提供了这个接口,官方改成了BlockExceptionHandler这个接口与实现。

@Configuration
public class MySentinelConfig implements BlockExceptionHandler 

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception 
        // BlockException 异常接口,其子类为Sentinel五种规则异常的实现类
        // AuthorityException 授权异常
        // DegradeException 降级异常
        // FlowException 限流异常
        // ParamFlowException 参数限流异常
        // SystemBlockException 系统负载异常
        String msg = null;
        if (e instanceof FlowException) 
            msg = "限流了";
         else if (e instanceof DegradeException) 
            msg = "降级了";
         else if (e instanceof ParamFlowException) 
            msg = "热点参数限流";
         else if (e instanceof SystemBlockException) 
            msg = "系统规则(负载/...不满足要求)";
         else if (e instanceof AuthorityException) 
            msg = "授权规则不通过";
        
//
//        response.setContentType("application/json;charset=utf-8");
//        response.getWriter().write(JSON.toJSONString(data));

        R error = R.error(500, msg);
//        R error = R.error(BizCodeEnum.TO_MANY_REQUEST.getCode(), BizCodeEnum.TO_MANY_REQUEST.getMessage());
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json");
        response.getWriter().write(JSON.toJSONString(error));
    

五、启动控制台

1、下载sentinel-dashboard-1.8.0.jar

地址:https://github.com/alibaba/Sentinel/releases

2、启动控制台

打开cmd窗口,进入sentinel-dashboard-1.8.0.jar文件所在的目录
输入

java -Dserver.port=8333 -Dcsp.sentinel.dashboard.server=localhost:8333 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar

3、在sentinel控制台添加限流


六、测试


不断刷新上面的地址就会显示如上错误


QQ群:722865146
分布式商城下载:https://gitee.com/charlinchenlin/wysmall

以上是关于sentinel1.8自定义错误信息的主要内容,如果未能解决你的问题,请参考以下文章

Ocelot 增加自定义Header到下游

Feign实现自定义错误处理

Sentinel限流原理(基于Sentinel1.8.1),限流熔断热点参数限流授权实现原理

SpringCloud-feign客户端统一处理下游服务自定义异常(1.5.x版本下可以)

“下游”和“上游”的定义

gin框架自定义验证错误提示信息