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. 如何正确捕获业务异常

  1. 修改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;

  1. 自定义Exception类和接口在同一个package中

5. 鸣谢

Dubbo异常处理

Dubbo异常

以上是关于Dubbo异常处理的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo服务治理

Dubbo接口中出现复杂参数,调用异常问题处理

dubbo接口统一异常处理的两种方式

dubbo超时重试和异常处理

接口调用异常啥意思

为啥dubbo使用ZkClient作为zookeeper的客户端