Dubbo异常处理
Posted 我是李果
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dubbo异常处理相关的知识,希望对你有一定的参考价值。
Dubbo异常处理
1. 问题
在使用Dubbo进行系统间的调用的时候,我们有时候可能会遇到这样的问题:服务提供者抛出了自定义的业务异常,但是服务消费者接收到的却是RunTimeException。这是为什么呢?这就得从Dubbo的ExceptionFilter说起。
2. ExceptionFilter源码分析
com.alibaba.dubbo.rpc.filter.ExceptionFilter ,实现 Filter 接口,异常过滤器实现类。代码如下:
3. 测试一下
自定义一个SelfException
定义一个接口
定义provider
定义consumer
测试结果
4. 如何正确捕获业务异常
- 修改ExceptionFilter的源码,抛出自定义异常。最好是定义一个白名单,白名单里面的异常是可以直接抛出的
String className = exception.getClass().getName();
if (className.startsWith("java.") || className.startsWith("javax."))
return result;
// directly throw if it's dubbo exception
if (exception instanceof RpcException)
return result;
//在这里添加我自己定义的异常类
if (exception instanceof SelfException)
return result;
- 自定义Exception类和接口在同一个package中
5. 鸣谢
以上是关于Dubbo异常处理的主要内容,如果未能解决你的问题,请参考以下文章