dubbo的异常处理网上描述的文章很多,复制黏贴也不在少数.在这里记录下自己的一些体会.
还是带着问题(目录)来写吧.
1.dubbo官方推荐的异常处理方式是什么?
2.dubbo处理异常的逻辑是什么样的?为什么要这样处理?
3.抛出自定义异常有哪些方式?
4.在dubbo:provider中设置filter="-exception", 去掉异常的filter会怎么样?
5.最终采用的异常处理方案
1.dubbo官方推荐的异常处理方式是什么?
在dubbo官方文档的服务化最佳实践中,推荐的处理方式如下:
2.dubbo处理异常的逻辑是什么样的?为什么要这样处理?
dubbo的异常处理类是com.alibaba.dubbo.rpc.filter.ExceptionFilter 类,源码这里就不贴了.归纳下对异常的处理分为下面几类:
1)如果provider实现了GenericService接口,直接抛出
2)如果是checked异常,直接抛出
3)在方法签名上有声明,直接抛出
4)异常类和接口类在同一jar包里,直接抛出
5)是JDK自带的异常,直接抛出
6)是Dubbo本身的异常,直接抛出
7)否则,包装成RuntimeException抛给客户端
网上有些文章对7)的处理有疑问,不理解原因,其实就是为了防止客户端反序列化失败.前面几种情况都能保证反序列化正常.
3.抛出自定义异常有哪些方式?