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

com.test.config.DubboExceptionFilter 是第一步中的DubboExceptionFilter 完整路径。需要更加自己的包路径进行调整
dubboExceptionFilter 拦截器别名,需要配置在yaml文件中

image.png

3. yaml 文件新增配置

dubbo:
  provider:
    # dubboExceptionFilter 对应第二步骤中的key,注意不要写错了
    filter: dubboExceptionFilter
  payload:
    default: -1
上一篇下一篇

猜你喜欢

热点阅读