编程技术分享平台

网站首页 > 技术教程 正文

阿里sentinel 代码分析-annotation

xnh888 2024-10-19 15:59:31 技术教程 20 ℃ 0 评论

annotation

实现技术aspectJ

关键类

public @interface SentinelResource annotation定义类

  • class SentinelResourceAspect extends AbstractSentinelAspectSupport aspect实现类


annotation 定义-SentinelResource -value,sentinel resource name

entryType

  • default EntryType.OUT

blockHandler

  • block时处理方法,参数定义应该比原始函数多一个Throwable ex
  • 如果方法和原始函数不在同一类,必须是static
  • 没有没有定义或者没有找到,调用fallback进行处理

blockHandlerClass

  • 定义handler方法所在类,虽然定义为数组,但只要第一个有用

fallback

  • 原始函数抛出exception时候的处理函数
  • 参数定义应该比原始函数多一个Throwable ex

fallbackClass

  • 定义fallback方法所在类,虽然定义为数组,但只要第一个有用
  • 配置了,对defaultfallback也生效

exceptionsToTrace

  • 定义调用fallback函数的exception 列表
  • default {Throwable.class} ,出ignore外的所有exception都调用

exceptionsToIgnore

  • 忽略,不调用fallback,直接throw的exception列表

defaultFallback

  • 不带参数的默认fallback执行,不建议使用,配置了fallback此配置无效

class SentinelResourceAspect

  • public Object invokeResourceWithSentinel(ProceedingJoinPoint pjp),@Around 方式执行
  • 当block时候调用父类的handleBlockException函数
  • 如果其他throw
  • ingrore 的直接throw
  • trace类的将exception登记到node的context中,然后执行handleFallback
  • 其他exception 直接throw

abstract class AbstractSentinelAspectSupport

  • Method extractDefaultFallbackMethod
  • 寻找defaultfall方法
  • extractFallbackMethod
  • 寻找fallback方法
  • handleBlockException
  • 寻找handle方法
  • 注意如果没有找到handlerblock方法,调用handleFallback
  • 函数Object handleFallback(
  • ,处理原始函数抛出exception信息,优先调用fallbackmethod,没有找到(含定义错误)调用defaultfallback

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表