From b8fb106aafd606802457d9b3b410dfb24f8df623 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 25 Jun 2022 22:10:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=20yudao-spring-boot-starter-?= =?UTF-8?q?rpc=20=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=A2=9E=E5=8A=A0=20Dubbo=20?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9A=84=E5=BC=82=E5=B8=B8=20Filter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yudao-dependencies/pom.xml | 5 ++ .../yudao-spring-boot-starter-rpc/pom.xml | 10 ++++ .../dubbo}/DubboProviderExceptionFilter.java | 42 +++++++-------- .../dubbo/com.alibaba.dubbo.rpc.Filter | 1 + .../mall-spring-boot-starter-dubbo/pom.xml | 53 ------------------- .../dubbo/com.alibaba.dubbo.rpc.Filter | 2 - 6 files changed, 35 insertions(+), 78 deletions(-) rename {归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/filter => yudao-framework/yudao-spring-boot-starter-rpc/src/main/java/cn/iocoder/yudao/framework/rpc/core/dubbo}/DubboProviderExceptionFilter.java (68%) create mode 100644 yudao-framework/yudao-spring-boot-starter-rpc/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter delete mode 100644 归档/common/mall-spring-boot-starter-dubbo/pom.xml delete mode 100644 归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 910f4146..ed1484fd 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -252,6 +252,11 @@ dubbo-cluster ${dubbo.version} + + org.apache.dubbo + dubbo-rpc-api + ${dubbo.version} + cn.iocoder.cloud yudao-spring-boot-starter-rpc diff --git a/yudao-framework/yudao-spring-boot-starter-rpc/pom.xml b/yudao-framework/yudao-spring-boot-starter-rpc/pom.xml index 5216178f..f48f8166 100644 --- a/yudao-framework/yudao-spring-boot-starter-rpc/pom.xml +++ b/yudao-framework/yudao-spring-boot-starter-rpc/pom.xml @@ -38,10 +38,20 @@ org.apache.dubbo dubbo-common + + org.apache.dubbo + dubbo-rpc-api + + + + + jakarta.validation + jakarta.validation-api + diff --git a/归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/filter/DubboProviderExceptionFilter.java b/yudao-framework/yudao-spring-boot-starter-rpc/src/main/java/cn/iocoder/yudao/framework/rpc/core/dubbo/DubboProviderExceptionFilter.java similarity index 68% rename from 归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/filter/DubboProviderExceptionFilter.java rename to yudao-framework/yudao-spring-boot-starter-rpc/src/main/java/cn/iocoder/yudao/framework/rpc/core/dubbo/DubboProviderExceptionFilter.java index 4d5b7110..69cc6072 100644 --- a/归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/filter/DubboProviderExceptionFilter.java +++ b/yudao-framework/yudao-spring-boot-starter-rpc/src/main/java/cn/iocoder/yudao/framework/rpc/core/dubbo/DubboProviderExceptionFilter.java @@ -1,28 +1,25 @@ -package cn.iocoder.mall.dubbo.core.filter; +package cn.iocoder.yudao.framework.rpc.core.dubbo; -import cn.iocoder.common.framework.exception.GlobalException; -import cn.iocoder.common.framework.exception.ServiceException; -import cn.iocoder.common.framework.util.ExceptionUtil; -import cn.iocoder.common.framework.vo.CommonResult; +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.iocoder.yudao.framework.common.exception.ServerException; +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.*; import org.apache.dubbo.rpc.service.GenericService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.lang.reflect.Type; -import static cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; -import static cn.iocoder.common.framework.exception.enums.GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR; +import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.*; @Activate(group = CommonConstants.PROVIDER) // TODO 优化点:设置下顺序 +@Slf4j public class DubboProviderExceptionFilter implements Filter, Filter.Listener { - private Logger logger = LoggerFactory.getLogger(DubboProviderExceptionFilter.class); - @Override public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { return invoker.invoke(invocation); @@ -55,14 +52,14 @@ public class DubboProviderExceptionFilter implements Filter, Filter.Listener { appResponse.setException(exception); } } catch (Throwable e) { - logger.warn("Fail to ExceptionFilter when called by " + RpcContext.getContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e); + log.warn("Fail to ExceptionFilter when called by " + RpcContext.getContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e); } } } @Override public void onError(Throwable e, Invoker invoker, Invocation invocation) { - logger.error("Got unchecked and undeclared exception which called by " + RpcContext.getContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e); + log.error("Got unchecked and undeclared exception which called by " + RpcContext.getContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e); } private boolean isReturnCommonResult(Invocation invocation) { @@ -78,32 +75,31 @@ public class DubboProviderExceptionFilter implements Filter, Filter.Listener { if (!(returnType instanceof Class)) { return false; } - Class returnClass = (Class) returnType; + Class returnClass = (Class) returnType; return returnClass == CommonResult.class; } /** * 处理 Validator 校验不通过产生的异常 */ - private GlobalException constraintViolationExceptionHandler(ConstraintViolationException ex) { - logger.warn("[constraintViolationExceptionHandler]", ex); + private ServiceException constraintViolationExceptionHandler(ConstraintViolationException ex) { + log.warn("[constraintViolationExceptionHandler]", ex); ConstraintViolation constraintViolation = ex.getConstraintViolations().iterator().next(); - return new GlobalException(BAD_REQUEST.getCode(), + return new ServiceException(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", constraintViolation.getMessage())); } /** * 处理系统异常,兜底处理所有的一切 */ - private GlobalException defaultExceptionHandler(Throwable exception, Invocation invocation) { - logger.error("[defaultExceptionHandler][service({}) method({}) params({}) 执行异常]", + private ServerException defaultExceptionHandler(Throwable exception, Invocation invocation) { + log.error("[defaultExceptionHandler][service({}) method({}) params({}) 执行异常]", invocation.getTargetServiceUniqueName(), invocation.getMethodName(), invocation.getArguments(), exception); // 如果已经是 GlobalException 全局异常,直接返回即可 - if (exception instanceof GlobalException) { - return (GlobalException) exception; + if (exception instanceof ServerException) { + return (ServerException) exception; } - return new GlobalException(INTERNAL_SERVER_ERROR) - .setDetailMessage(this.buildDetailMessage(exception, invocation)); + return new ServerException(INTERNAL_SERVER_ERROR).setMessage(this.buildDetailMessage(exception, invocation)); } private String buildDetailMessage(Throwable exception, Invocation invocation) { diff --git a/yudao-framework/yudao-spring-boot-starter-rpc/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter b/yudao-framework/yudao-spring-boot-starter-rpc/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter new file mode 100644 index 00000000..20b1251b --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-rpc/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter @@ -0,0 +1 @@ +dubboExceptionFilter=cn.iocoder.yudao.framework.rpc.core.dubbo.DubboProviderExceptionFilter diff --git a/归档/common/mall-spring-boot-starter-dubbo/pom.xml b/归档/common/mall-spring-boot-starter-dubbo/pom.xml deleted file mode 100644 index 31acd196..00000000 --- a/归档/common/mall-spring-boot-starter-dubbo/pom.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - common - cn.iocoder.mall - 1.0-SNAPSHOT - - 4.0.0 - - mall-spring-boot-starter-dubbo - - - - - cn.iocoder.mall - common-framework - - - - - org.springframework.boot - spring-boot-starter-web - true - - - - - - - - - - - org.apache.dubbo - dubbo-spring-boot-starter - - - - - org.slf4j - slf4j-api - - - - - javax.validation - validation-api - - - - diff --git a/归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter b/归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter deleted file mode 100644 index f81a93f7..00000000 --- a/归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter +++ /dev/null @@ -1,2 +0,0 @@ -dubboExceptionFilter=cn.iocoder.mall.dubbo.core.filter.DubboProviderExceptionFilter -dubboProviderRouterTagFilter=cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter