news 2026/7/8 13:53:45

微服务速成-Setinel

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微服务速成-Setinel

作用:作为服务保护,可以对资源(包括接口,方法调用,远程 调用)进行限流,熔断降级等操作

快速入门使用:

1,下载Sentinel的jar包

下载不了的去这个https://github.com/alibaba/Sentinel/releases/tag/1.8.8

启动命令:java -jar sentinel

浏览器地址:localhost:8080 账号密码都是sentinel

2,引入Sentinel依赖

依赖名称 spring-cloud-starter-alibaba-sentinel

配置Sentinel的地址:spring.cloud.sentinel.transport.dashboard=127.0.0.1:8080

3,项目中使用:

一共有三种场景使用,web接口进行保护,调用某个方法接口进行保护,远程调用时进行保护,并且限流等规则触发时会抛出BlockException,我们需要做好异常处理

web接口进行保护

在Sentinel中心的簇点链路中对服务的主接口进行保护--添加规则

报错处理

手动实现BlockExceptionHandler接口,并且将该类注册到容器当中,即可自定义异常处理

@Component public class MyBlockExceptionHandler implements BlockExceptionHandler { @Override public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception { // 所有被限流/熔断的请求都走到这里 response.setStatus(200); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("{\"msg\":\"请求太频繁了,请稍后再试\"}"); } }

对方法进行保护

对于Sentinel而言,是无法直接感知到方法调用的,只能手动加上@SentinelResource注解,这样Sentinel就能识别到这个资源,并对其进行保护

@SentinelResource( value = "getProduct", blockHandler = "blockHandlerMethod", // Sentinel 限流/熔断时走这个 fallback = "fallbackMethod" // 业务代码报错时走这个 ) public Product getProduct(Long id) { // 远程调用 product 服务 return productClient.getProduct(id); } // blockHandler:参数和原方法一致,最后多一个 BlockException public Product blockHandlerMethod(Long id, BlockException e) { return new Product("请求太频繁了,请稍后再试"); } // fallback:参数和原方法一致,最后多一个 Throwable public Product fallbackMethod(Long id, Throwable e) { return new Product("服务暂时不可用"); }

报错处理

同样的,违反规则是会抛出BlockException

首先Sentinel会去找注解上有没有blockHandler

如果没有再去找fallback

如果都没有则抛给SpringBoot来处理异常,我们可以自定义一个全局异常处理类

@RestControllerAdvice public class GlobalExceptionHandler { /** * 当没有给blockHandler时,会被默认处理 */ @ExceptionHandler(BlockException.class) public R handleBlockException(BlockException e){ return R.error("系统错误"+e.getMessage()+e.getClass()); } }

对远程调用进行保护

我们只需要在配置中改写Feign远程调用的配置即可实现远程调用也被Sentinel保护起来

配置如下:feign.sentinel.enabled=true

同时编写一个降级类来实现远程调用的接口,自定义fallback逻辑,并在@FeignClient注解上加上fallback

@FeignClient(value = "service-product", fallback = ProductClientFallback.class) public interface ProductClient { @GetMapping("/product") Product getProduct(@RequestParam("productId") Long productId); }
// 降级兜底 @Component public class ProductClientFallback implements ProductClient { @Override public Product getProduct(Long productId) { Product p = new Product(); p.setName("商品服务暂时不可用"); return p; } }

异常处理总结

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 13:49:43

2026最新整理 高评价英语作文批改平台选这几款就对了

核心要点拆解英语作文批改行业3个共性技术痛点,附5年从业者实测踩坑经验 对比4类主流批改方案的核心参数,全是无广告中立实测结果 不同使用场景对应适配建议,不用盲目追贵的、功能多的产品行业痛点深度剖析做了5年英语教育技术相关的内容&…

作者头像 李华
网站建设 2026/7/8 13:47:59

基于Python的大语言模型应用开发框架设计与实现

在构建大语言模型应用时,直接面向 API 编程容易导致代码重复、耦合度高、提示管理混乱。本文从设计思路出发,介绍一个轻量级 Python 框架 FlowLLM 的核心架构,重点阐述如何通过抽象与组合降低复杂度,并配合少量关键代码展示实现要…

作者头像 李华
网站建设 2026/7/8 13:46:52

3个AI角色设定,一个人活成一支队伍(参考张江AI实践)

一句话:不要用一个AI干所有事。给AI分角色——写手管内容、策略官管判断、质检员管审查。每个角色一套规则,切换使用。附角色线程模板。📌 "一人公司AI内容生产系统"系列 第08篇/共48篇 ◆ 当前阶段:启动篇 第8篇 ◆ 上…

作者头像 李华
网站建设 2026/7/8 13:46:10

Pandas 2.2 与 Scikit-learn 1.5 数据预处理实战:电商用户行为数据清洗与特征工程全流程

Pandas 2.2 与 Scikit-learn 1.5 电商用户行为数据预处理实战指南1. 电商数据预处理的核心挑战与工具链升级电商平台每天产生TB级的用户行为数据,这些数据蕴含着宝贵的商业洞察,但原始数据往往存在点击流断裂、属性缺失、异常订单等问题。传统的数据预处…

作者头像 李华
网站建设 2026/7/8 13:41:06

WinMerge|2026最新版免费文件对比工具(附官网安装包)

在数字化办公和软件开发的日常工作中,我们经常会遇到这样的场景: 两份看起来几乎一模一样的文档,却不知道具体哪里修改过;两段代码复制来复制去,最后搞不清哪个才是最新版本;两个文件夹里的文件琳琅满目&a…

作者头像 李华