springboot dubbo 全局拦截器
2024-03-21 本文已影响0人
zt_sole
1. 增加 DubboExceptionFilter
import cn.hutool.core.lang.UUID;
import com.alibaba.dubbo.rpc.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.dubbo.rpc.service.GenericService;
@Slf4j
public class DubboExceptionFilter implements Filter{
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
Result result = invoker.invoke(invocation);
if(result.hasException() && GenericService.class !=invoker.getInterface()){
// 存在异常进行异常处理
String uid="ERROR_"+UUID.fastUUID().toString().split("-")[4];
String message=result.getException().getMessage()+"["+uid+"]";
// 打印异常栈信息
log.error("{}:{}", uid,ExceptionUtils.getFullStackTrace(result.getException()));
// 重置异常抛出,可以根据业务重新定义异常信息
result.setException(new Exception(message));
}
return result;
}
}
2.增加 com.alibaba.dubbo.rpc.Filter文件并写入以下内容
dubboExceptionFilter=com.test.config.DubboExceptionFilter
image.pngcom.test.config.DubboExceptionFilter 是第一步中的DubboExceptionFilter 完整路径。需要更加自己的包路径进行调整
dubboExceptionFilter 拦截器别名,需要配置在yaml文件中
3. yaml 文件新增配置
dubbo:
provider:
# dubboExceptionFilter 对应第二步骤中的key,注意不要写错了
filter: dubboExceptionFilter
payload:
default: -1