专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 浅谈Dubbo异常处理

浅谈Dubbo异常处理

更新时间:2022-03-18 11:58:48 来源:赢咖4 浏览1702次

我们的项目使用了dubbo进行不同系统之间的调用。

每个项目都有一个全局的异常处理,对于业务异常,我们会抛出自定义的业务异常(继承RuntimeException)。

全局的异常处理会根据不同的异常类型进行不同的处理。

最近我们发现,某个系统调用dubbo请求,provider端(服务提供方)抛出了自定义的业务异常,但consumer端(服务消费方)拿到的并不是自定义的业务异常。

这是为什么呢?还需要从dubbo的ExceptionFilter说起

我们来看看dubbo官方文档的推荐处理方式是什么

浅谈Dubbo异常处理

dubbo在代码中的处理方式是什么?

从上面我们可以看出,dubbo的处理方式主要是:

1. 如果provider实现了GenericService接口,直接抛出

2.如果是checked异常,直接抛出

3.在方法签名上有声明,直接抛出

4.异常类和接口类在同一jar包里,直接抛出

5.是JDK自带的异常,直接抛出

6.是Dubbo本身的异常,直接抛出

7.否则,包装成RuntimeException抛给客户端

接下来我们来测试一下

我们自定义一个SelfException

在服务端中抛出一个自定义的异常

启动服务对并对服务端进行访问,我们可以发现

服务端的日志

客户端的日志

可以看出, 我们这里并没有抛出自定义的异常, 从而会导致客户端没有捕捉到自定义的异常.

如何正确捕获业务异常

抛出一个自定义异常有这么麻烦吗? 主要原因是dubbo没有支持的原因.

既然这样,我们把dubbo变的支持不就可以了?

是的.把源码改一下就OK了.如下:

或者直接将117行的RuntimeException替换成自己的自定义异常!这样就从根本上解决了异常处理的问题.后续有其他问题,也可以直接修改。

通过上述相信大家对Dubbo的异常处理已经有所了解,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下赢咖4的Java赢咖4在线学习,里面的课程内容从入门到精通,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>