依赖包 pom.xml
如下:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>3.0.4</version>
</dependency>
dubbo 服务:
示例:
@DubboService(interfaceClass = PersonService.class, group = "HSF", version = "2.0.0")
@Component
public class PersonServiceImpl implements PersonService {
}
dubbo 统一异常处理
指定切入点,进行环绕通知。如果有异常,就捕获后处理。
@Aspect
@Component
@Slf4j
public class DubboExceptionAop {
/**
* 定义切入点。 指定dubbo service的注解。
* 如果是旧版本,使用
* @Pointcut("@within(org.apache.dubbo.config.annotation.Service)")
*
*/
@Pointcut("@within(org.apache.dubbo.config.annotation.DubboService)")
public void dubboException() {
}
/**
* 环绕通知
*
*/
@Around(value = "dubboException()")
public Object handlerException(ProceedingJoinPoint proceedingJoinPoint) {
Object result = null;
Long time = System.currentTimeMillis();
Signature signature = proceedingJoinPoint.getSignature();
String params = JSON.toJSONString(proceedingJoinPoint.getArgs());
try {
result = proceedingJoinPoint.proceed();
} catch (BusinessException businessException) {
//业务异常
log.error("{} dubbo businessException:{},param:{}", signature.getName(), businessException.getMessage(), params,businessException);
result = new Response<>(Response.Status.FAILED.getCode(), businessException.getMessage());
} catch (Throwable throwable) {
log.error("{} dubbo exception:{},param:{}", signature.getName(), params,throwable);
result = new Response<>(Response.Status.FAILED.getCode(), "失败");
} finally {
Long cost = System.currentTimeMillis() - time;
//统计耗时
log.info("{} biz over,it takes time:{}", signature.getName(), cost);
}
return result;
}
}
标签:businessException,dubbo,proceedingJoinPoint,result,signature,异常,public,统一
From: https://www.cnblogs.com/expiator/p/18113734