笔记1:

@SentinelResource:

@SentinelResource 用于定义资源,并提供可选的异常处理fallback 配置项。

属性
作用
value
资源名称
entryType
entry 类型,标记流量的方向,取值 IN/OUT ,默认是 OUT
blockHandler
处理 BlockException 的函数名称 , 函数要求:
1. 必须是 public
2. 返回类型 参数与原方法一致
3. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 blockHandlerClass ,并指定 blockHandlerClass 里面的方法。
blockHandlerClass
存放 blockHandler 的类 , 对应的处理函数必须 static 修饰。
fallback
用于在抛出异常的时候提供 fallback 处理逻辑。 fallback函数可以针对所 有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进 行处理。函数要求:
1. 返回类型与原方法一致
2. 参数类型需要和原方法相匹配
3. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
fallbackClass
存放 fallback 的类。对应的处理函数必须 static 修饰。
defaultFallback
用于通用的 fallback 逻辑。默认 fallback函数可以针对所有类型的异常进 行处理。若同时配置了 fallback 和 defaultFallback ,以 fallback为准。函 数要求:
1. 返回类型与原方法一致
2. 方法参数列表为空,或者有一个 Throwable 类型的参数。
3. 默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
exceptionsToIgnore
指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入 fallback 逻辑,而是原样抛出。
exceptionsToTrace
需要 trace 的异常

定义限流和降级后的处理类和方法:

注意:虽然可以直接在当前类写方法,但复用性低(不建议)!

定义处理类可以提高复用性,但方法必须加上static(很重要)!

在接口或方法上用 @SentinelResource 标识为资源,并配置 value , blockHandlerClass , blockHandler , fallbackClass , fallback 属性.

新建OrderServiceImpl3BlockHandlerClass类:

// BlockException 异常接口,其子类为Sentinel五种规则异常的实现类:// AuthorityException 授权异常// DegradeException 降级异常// FlowException 限流异常// ParamFlowException 参数限流异常// SystemBlockException 系统负载异常
@Slf4j
public class OrderServiceImpl3BlockHandlerClass {//定义BlockException处理类//注意:必须加上static修饰public static String blockHandler(BlockException ex) {log.error("{}", ex);return "接口被限流或者降级了...";}
}

新建OrderServiceImpl3FallbackClass类:

@Slf4j
public class OrderServiceImpl3FallbackClass {//定义Throwable处理类//Throwable时进入的方法public static String fallback(Throwable throwable) {log.error("{}", throwable);return "接口发生异常了...";}
}
OrderServiceImpl3类:
@Service
@Slf4j
public class OrderServiceImpl3 {int i = 0;/*@SentinelResource("资源名")注解: 用于指定本地资源(接口)并配置相应的流控规则.*/@SentinelResource(value = "/message5",//资源名blockHandlerClass = OrderServiceImpl3BlockHandlerClass.class,//可以指定外部类blockHandler = "blockHandler",//发生BlockException时调用,本类没有则须指定blockHandlerClassfallbackClass = OrderServiceImpl3FallbackClass.class,//可以指定外部类fallback = "fallback")//发生Throwable时调用,本类没有则须指定fallbackClasspublic String message5() {i++; //每次调用接口i就+1;所以i从1,2,3,4递增,每次递增1if ( i % 3 == 0 ) {throw new RuntimeException();}//每过3次就触发一次异常,接口就会调用失败return "message5";}// //直接在本类定义发生BlockException时进入的方法(复用性低,不建议)
//  public String blockHandler(BlockException ex) {
//      log.error("{}", ex);
//      return "接口被限流或者降级了...";
//  }
//  //直接在本类定义发生Throwable时进入的方法(复用性低,不建议)
//  public String fallback(Throwable throwable) {
//      log.error("{}", throwable);
//      return "接口发生异常了...";
//  }
}

Nepxion Discovery学习笔记4 Sentinel流量防卫兵/服务容错综合方案相关推荐

  1. Nepxion Discovery学习笔记3 Sentinel流量防卫兵/服务容错综合方案

    Sentinel(分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案.它以流量 为切入点, 从流量控制.熔断降级.系统负载保护等多个维度来保护服务的稳定性. 笔记1: Sentin ...

  2. SpringCloud Alibaba之 Sentinel流量防卫兵

    文章目录 Sentinel 流量防卫兵 一.安装与部署

  3. Sentinel流量防卫兵

    前言 在我们平常工作中,总会有这样的事情发生:服务无法承受过多的请求而被打挂. 一般我们可以从两个方面处理: 增加节点,水平扩展(钱总是万能的) 对请求量过高的接口进行限流(没钱也不是不可以) 突发情 ...

  4. Sentinel 流量防卫兵-SpringCloudAlibaba No.4

    这里写目录标题 安装与部署 1.下载 2.配置idea启动 3.需要的微服务加上依赖 4.需要的微服务的配置文件 流量控制 1.小试牛刀 2.链路模式: 1.一视同仁 2.区别对待 3.其他流控模式刻 ...

  5. Sentinel流量防卫兵和组成成分

    在分布式系统里,许多服务之间通过远程调用实现信息交互,调用时不可避免会出现调用失败,比如超时.异常等原因导致调用失败,Sentinel能够保证在一个服务出问题的情况下,不会导致整体服务失败,避免级联故 ...

  6. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用

    官网 https://sentinelguard.io/ 服务雪崩 微服务中各个服务之间通过http/rpc互相调用,假设其中1个服务因为网络或自身原因出现问题,调用这个服务就会出现线程堵塞,此时若有 ...

  7. 3 - 分布式系统的流量防卫兵:Sentinel

    Java工程师的进阶之旅 学习 SpringCloud2 这一篇就够了 1 - SpringCloud Alibaba 介绍 2 - 服务注册与配置中心:Nacos 3 - 分布式系统的流量防卫兵:S ...

  8. SpringCloudAlibaba - 分布式流量防卫兵Sentinel

    一. Sentinel: 分布式系统的流量防卫兵 - 阿里巴巴产品 具体介绍可以看官方文档:https://github.com/alibaba/Sentinel/wiki/介绍,下面我们说点官方没有 ...

  9. Sentinel流量防控卫兵

    Sentinel流量防控卫兵 启动控制台 利用@SentinelResource的低侵入方式 探讨blockHandler和fallback的区别 也可以直接按照官方的操作https://github ...

最新文章

  1. mysql中的多行查询结果合并成一个
  2. H3C S5560交换机风扇反转告警
  3. request.getAttribute()和 request.getParameter()有何区别?
  4. 打印Java数组最优雅的方式
  5. 网页中加载obj模型比较慢_R语言估计时变VAR模型时间序列的实证研究分析案例...
  6. SQL Server 2008空间数据应用系列四:基础空间对象与函数应用
  7. MFC通过sql访问excel的方法
  8. linux启动 mongo 不了问题
  9. 【物理应用】基于matlab GUI家庭室内温湿度控制【含Matlab源码 326期】
  10. 【转】C#字符串转换为日期
  11. 一看就懂:正则表达式
  12. 数学建模之层次分析法(含MATLAB代码)
  13. index函数python什么意思_详解python中的index函数用法
  14. Springboot整合Hibernate入门
  15. LeetCode--第25题K个一组翻转链表
  16. 假期北京旅游请注意了!
  17. winrar正确破解方法
  18. thingsboard
  19. 为什么学习信息学竞赛?
  20. 目标检测的评价指标P,R,mAP

热门文章

  1. 50个国内外最优秀的C/C++源代码网站(网站)
  2. 给飞驰的法拉利换引擎 - 谈边做业务边做架构重构(1)——有的放矢
  3. java流程控制——嵌套循环
  4. WebOffice插件实例
  5. php+控制器中的全局变量,php中的全局变量引用
  6. Php全局变量和局部变量
  7. 脱机手写中文文本行识别系统——软件设计方案
  8. 前篇|拒绝捞回在风控中的应用
  9. java 获取打印机缺纸_Java怎么实现打印机监控
  10. 【邮件退订链接服务】什么是邮件退订链接? - EmailCamel