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自定义错误信息的主要内容,如果未能解决你的问题,请参考以下文章
Sentinel限流原理(基于Sentinel1.8.1),限流熔断热点参数限流授权实现原理