| 流控规则配置资源名,可以是Rest风格的接口映射地址,可以是方法上@SentinelResource中指定的value |
| 若接口上使用了@SentinelResource则执行自定义兜底的方法,没有则返回sentinel默认的信息 |
| |
| 以上的降级案例中业务方法和降级处理方法高度耦合,若每个业务方法配置一个降级方法,会造成代码膨胀 |
| 解决方案:把降级处理方法提取到一个自定义限流处理类中,当业务方法需要降价处理时,指定相应的降级方法 |
| 配置案例: |
| 1. 创建CustomerBlockHandler类作为自定义的限流处理类,在类中编写兜底的方法 |
| 2. 在控制层的方法上添加注解,指定降级处理的方法 |
| @SentinelResource(value = "customerBlockHandler", |
| blockHandlerClass = CustomerBlockHandler.class, |
| blockHandler = "handlerException2") |
| |
| 3. 在sentinel页面中配置限流规则 |
| 4. 测试 |
| 1. 新建子模块:cloudalibaba-provider-payment9003、cloudalibaba-provider-payment9004作为服务提供者,pom中引入nacos依赖 |
| 2. yml中配置端口、服务名、nacos的ip+端口、暴露监控信息;启动类添加注解@EnableDiscoveryClient;编写业务类用于测试 |
| 3. 新建cloudalibaba-consumer-nacos-order84作为服务消费者,pom中引入nacos、sentinel依赖,yml中配置端口、服务名、nacos的ip+端口、要访问的服务集群的名称 |
| 4. 启动类添加注解@EnableDiscoveryClient;配置类注入RestTemplate,配置类添加注解@LoadBalanced |
| 5. 编写控制层,通过restTemplate调用支付模块集群的方法 |
| 6. 测试:启动nacos、9003、9004、84,通过84的接口可负载均衡访问9003、9004; |
| 7. 在84模块的接口上无任何配置,若访问84的接口时出现异常,则会显示错误信息 |
| 8. 在84模块的接口上只配置fallback,再次访问84的接口出现异常时服务降级,去执行兜底的方法 |
| 9. 在84模块的接口上只配置blockHandler ,针对的是sentinel流控规则,先在sentinel页面配置限流规则,再次访问84的接口出现异常时不会进行服务降级,只有触发了限流规则才进行服务降级,执行blockHeadler自定义的兜底方法 |
| 10. 在84模块的接口上同时配置fallback和blockHeadler,再次访问84的接口出现异常,且触发限流规则,这时服务降级执行的是blockHeadler自定义的兜底方法 |
| 11. @SentinelResource(value = "fallback",fallback = "handlerFallback",blockHandler = "blockHandler", |
| exceptionsToIgnore = {IllegalArgumentException.class}) # 该注解表示出现指定异常不用兜底方法 |
| |
| 12. 84使用OpenFeign调用9003、9004,84的pom中引入openfeign依赖,yml中配置sentinel对openfeign的支持,启动类添加@EnableFeignClients;业务层编写feign接口调用服务提供者集群的接口,同时添加@Feignclient,业务层实现该接口,这个实现类作为feign接口的兜底方法;编写控制层调用业务层 |
| |
| 13. 测试:访问84的接口调用服务提供者的方法,关闭9003、9004的服务,访问84时服务降级 |
| 1. 在sentinel页面中配置限流规则后,重启服务后,配置的规则不会保存,需将限流规则保存到nacos |
| 2. 修改cloudalibaba-sentinel-service8401,pom中引入依赖datasource-nacos,yml中已经配置了nacos和sentinel,再配置nacos数据源用于sentinel获取nacos中保存的限流规则 |
| 3. nacos中新增限流规则 |
| resource:资源名称 |
| limitApp:来源应用 |
| grade:阈值类型,0表示线程数, 1表示QPS |
| count:单机阈值 |
| strategy:流控模式,0表示直接,1表示关联,2表示链路 |
| controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待 |
| clusterMode:是否集群 |
| |

| 4. 测试:重启微服务,访问一下微服务的接口,这时sentinel中就获取到nacos中的限流规则了 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术