当前位置: 首页 > news >正文

Sentinel相关记录

系列文章目录

draft

Sentinel 是阿里巴巴开源的 轻量级服务防护组件,主要用于实现以下功能:流量控制FlowRule(Rate Limiting):限制单位时间内的请求量,防止系统过载。
熔断降级DegradeRule(Circuit Breaker):当某个服务异常时,自动熔断,避免雪崩效应。
系统自适应保护SystemRule:根据系统的负载情况动态调整资源分配。
热点参数限流ParamFlowRule:对某些高频访问的参数进行限流。
集群流控:支持分布式系统的统一限流策略。
Sentinel 的设计目标是 低侵入性、高扩展性、易于集成,常用于微服务架构中。

文章目录

  • 系列文章目录
  • 一、Sentinel DashBoard搭建
  • 二、web接口资源
    • 1、web资源正常和异常请求--preHandle()
    • 2、流控规则设置-QPS=1
    • 3、自定义异常处理
  • 二、@SentinelResource资源
    • 1、自定义异常处理
  • 三、流量控制-流控模式-链路策略
  • 四、熔断降级


一、Sentinel DashBoard搭建

网上很多教程,省略

二、web接口资源

在这里插入图片描述

1、web资源正常和异常请求–preHandle()

返回true, 表述放行,返回false,表示违背设置规则,报错
在这里插入图片描述

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String resourceName = "";try {resourceName = this.getResourceName(request);if (StringUtil.isEmpty(resourceName)) {return true;} else if (this.increaseReference(request, this.baseWebMvcConfig.getRequestRefName(), 1) != 1) {return true;} else {String origin = this.parseOrigin(request);String contextName = this.getContextName(request);ContextUtil.enter(contextName, origin);Entry entry = SphU.entry(resourceName, 1, EntryType.IN);request.setAttribute(this.baseWebMvcConfig.getRequestAttributeName(), entry);return true;}} catch (BlockException var12) {BlockException e = var12;try {this.handleBlockException(request, response, resourceName, e);} finally {ContextUtil.exit();}return false;}}

2、流控规则设置-QPS=1

在这里插入图片描述
如果多次请求
在这里插入图片描述

public class DefaultBlockExceptionHandler implements BlockExceptionHandler {public DefaultBlockExceptionHandler() {}public void handle(HttpServletRequest request, HttpServletResponse response, String resourceName, BlockException ex) throws Exception {response.setStatus(429);PrintWriter out = response.getWriter();out.print("Blocked by Sentinel (flow limiting)");out.flush();out.close();}
}

3、自定义异常处理

显示结果:在这里插入图片描述

在这里插入代码片
@Component
public class MyBlockException implements BlockExceptionHandler {private ObjectMapper objectMapper = new ObjectMapper();@Overridepublic void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s, BlockException e) throws Exception {httpServletResponse.setContentType("application/json;charset=UTF-8");PrintWriter writer = httpServletResponse.getWriter();R error = R.error(500, "服务不可用,请稍后再试!" + e.getClass());String s1 = objectMapper.writeValueAsString(error);writer.write(s1);writer.flush();writer.close();}
}

二、@SentinelResource资源

给 @SentinelResource(value = “createOrder”)添加流控规则,违反规则以后
在这里插入图片描述
异常, 这是springboot 异常情况默认返回
在这里插入图片描述

1、自定义异常处理

 @SentinelResource(value = "createOrder",blockHandler = "createOrderFallback")
public  public Order createOrder(Long id, Long userId) {}
自定义createOrderFallback
//设置兜底回调public Order createOrderFallback(Long id, Long userId, BlockException blockException) {Order order = new Order();order.setId(id);order.setUserId(userId);order.setTotalPrice(BigDecimal.ZERO);order.setUserName("Fallback User");order.setProducts(Arrays.asList()); // 返回空产品列表return order;}

三、流量控制-流控模式-链路策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
异常情况
在这里插入图片描述
/create 不管执行多少次,都是正常的
在这里插入图片描述

四、熔断降级

在这里插入图片描述

切断不稳定调用
快速返回不积压
避免雪崩效应
熔断降级作为保护自身的手段,通常在客户端进行配置

在这里插入图片描述
在这里插入图片描述

在 5 秒的时间窗口内,如果有 5 个请求,并且其中 80% 的请求超时(例如超过 1 秒),则触发熔断。此时如果系统有兜底数据,会返回兜底数据,避免直接报错。
熔断窗口结束后,断路器进入半开状态。此时会尝试发送一个探测请求。如果探测调用成功,断路器将切换为关闭状态,后续请求可以正常调用;如果探测调用失败或依然很慢,断路器保持打开状态,继续拒绝请求,直到下一次熔断条件再次被触发。
http://www.xdnf.cn/news/1354537.html

相关文章:

  • OSI参考模型TCP/IP模型 二三事
  • docker的基础配置
  • redis----hash类型详解
  • Python的标准库之时间库(小白五分钟从入门到精通)
  • 终端复用工具 tmux 的使用方式与推荐配置
  • Autosar CAN开发06(CAN通讯开发需求-CAN矩阵)
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月23日第168弹
  • 【机器学习深度学习】模态与多模态的概念
  • 使用 AD 帐户从 ASP.NET 8 容器登录 SQL Server 的 Kerberos Sidecar
  • uniapp对接一键登录
  • FL Studio Win版.exe安装教程(直接安装版/详细步骤/附安装包下载)
  • 全面解析主流AI模型:功能对比与应用推荐
  • 离线优先与冲突解决:ABP vNext + PWA 的边缘同步
  • AI实现超级客户端打印 支持APP 网页 小程序 调用本地客户端打印
  • 可视化-模块1-HTML-02
  • week4-[循环结构]生日悖论-new
  • Dubbo vs Feign
  • Python 学习(十六) 下一代 Python 包管理工具:UV
  • More Effective C++ 条款04:非必要不提供默认构造函数
  • Day58 Java面向对象13 instanceof 和 类型转换
  • OCR、文档解析工具合集(下)
  • Text2API与Text2SQL深度对比:自然语言驱动的数据交互革命
  • 【51单片机】【protues仿真】基于51单片机冰箱系统
  • 嘉立创EDA快捷键汇总
  • 每日一题8.23
  • Windows应急响应一般思路(三)
  • 从词源和输出生成等角度详细解析PHP中常用文件操作类函数
  • BEVDet/BEVDet4D
  • 【40页PPT】数据安全动态数据脱敏解决方案(附下载方式)
  • LeetCode 分类刷题:2529. 正整数和负整数的最大计数