소스 검색

Add overloaded handleBlockException method for customized extension (#223)

master
bitonly Eric Zhao 6 년 전
부모
커밋
8f85dc5643
1개의 변경된 파일11개의 추가작업 그리고 6개의 파일을 삭제
  1. +11
    -6
      sentinel-extension/sentinel-annotation-aspectj/src/main/java/com/alibaba/csp/sentinel/annotation/aspectj/AbstractSentinelAspectSupport.java

+ 11
- 6
sentinel-extension/sentinel-annotation-aspectj/src/main/java/com/alibaba/csp/sentinel/annotation/aspectj/AbstractSentinelAspectSupport.java 파일 보기

@@ -47,24 +47,29 @@ public abstract class AbstractSentinelAspectSupport {

protected Object handleBlockException(ProceedingJoinPoint pjp, SentinelResource annotation, BlockException ex)
throws Exception {
return handleBlockException(pjp, annotation.fallback(), annotation.blockHandler(), annotation.blockHandlerClass(), ex);
}

protected Object handleBlockException(ProceedingJoinPoint pjp, String fallback, String blockHandler,
Class<?>[] blockHandlerClass, BlockException ex) throws Exception {
// Execute fallback for degrading if configured.
Object[] originArgs = pjp.getArgs();
if (isDegradeFailure(ex)) {
Method method = extractFallbackMethod(pjp, annotation.fallback());
Method method = extractFallbackMethod(pjp, fallback);
if (method != null) {
return method.invoke(pjp.getTarget(), originArgs);
}
}
// Execute block handler if configured.
Method blockHandler = extractBlockHandlerMethod(pjp, annotation.blockHandler(), annotation.blockHandlerClass());
if (blockHandler != null) {
Method blockHandlerMethod = extractBlockHandlerMethod(pjp, blockHandler, blockHandlerClass);
if (blockHandlerMethod != null) {
// Construct args.
Object[] args = Arrays.copyOf(originArgs, originArgs.length + 1);
args[args.length - 1] = ex;
if (isStatic(blockHandler)) {
return blockHandler.invoke(null, args);
if (isStatic(blockHandlerMethod)) {
return blockHandlerMethod.invoke(null, args);
}
return blockHandler.invoke(pjp.getTarget(), args);
return blockHandlerMethod.invoke(pjp.getTarget(), args);
}
// If no block handler is present, then directly throw the exception.
throw ex;


Loading…
취소
저장