springboot dubbo統一異常處理

 dubbo服務中爲了對外隱藏具體異常,給上游調用方更直接的返回提示,可以通過dubbo的Filter方式和SpringAop方式

dubbo的Filter方式如下:

1、實現過濾器


import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.*;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;

/**
 * dubbo 對外異常統一處理
 *
 * @author awen
 */
@Activate(group = Constants.PROVIDER)
public class ExceptionFilter implements Filter {

    private static final Logger logger = LoggerFactory.getLogger(ExceptionFilter.class);

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        Result result = null;
        try {
            result = invoker.invoke(invocation);
            Method method = invoker.getInterface().getMethod(invocation.getMethodName(), invocation.getParameterTypes());
            Class returnType = method.getReturnType();
            if (result.hasException()) {
                Throwable throwable = result.getException();
                if (returnType.getName().equals("com.liwen.domain.Result")) {
                    com.liwen.domain.Result myResult;
                    if (throwable instanceof com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException) {
                        myResult = ResultUtils.wrapFailure(0, "重複操作");
                    } else {
                        myResult = ResultUtils.wrapFailure(1, "系統錯誤");
                    }
                    logger.error("服務異常 myResult=" + myResult, result);
                    return new RpcResult(myResult);
                }
            }
        } catch (Exception e) {
            logger.error("統一捕捉異常失敗", e);
        }
        return result;
    }
}

2、在resources目錄下添加純文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter,內容如下:
   exceptionFilter=com.liwen.filter.ExceptionFilter
 
3、修改dubbo的provider配置文件,在dubbo:provider中添加配置的filter,如下:
     <dubbo:provider filter="exceptionFilter"></dubbo:provider>

 

aop參考:https://www.cnblogs.com/zcz527/p/7655235.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章