首页
学习
活动
专区
圈层
工具
发布

dubbo如何处理业务异常,这个一定要知道哦!

provicer生产者代码

其中的DataNotFoundException继承了BusinessException

DataNotFoundException的编码以及错误信息:  PUBLIC_DATA_NOT_FOUND(1001,"数据没有找到")

consumer消费者代码

上面的code为1401,是系统异常编码,并不是DataNotFoundException编码

我们定义的DataNotFoundException的编码为:1001

我们来分析一些代码

if (appResponse.hasException() && GenericService.class != invoker.getInterface())

上面代码的含义就是如果有异常并且未实现GenericService接口,进入后续判断逻辑,否则直接返回结果。

上面代码的含义就是不是RuntimeException类型的异常,并且是受检异常(继承Exception),直接抛出。

上面代码的含义就是在方法签名上有声明,直接抛出

上面代码的含义就是如果异常类和接口类在同一个jar包中,直接抛出

上面代码的含义就是以java.或javax.开头的异常直接抛出

上面代码的含义就是dubbo自身的异常,直接抛出。

2、在此处加上一段代码来过滤我们项目中的异常,以免被dubbo重新封装

3、在resources目录下添加纯文本文件META-

INF/dubbo/com.alibaba.dubbo.rpc.Filter并添加内容

dubboExceptionFilter=com.rainbow.goods.server.filter.DubboExceptionFilter

4、修改dubbo 的配置文件,将DubboExceptionFilter加载进去并且去掉自身的ExceptionFilter

上面exception就是dubbo默认的处理异常的filter,前面-号就代表去除

我们修改后,在运行

抛出的是我们自定义的异常了,再看看消费端的异常处理最终显示

确实是我们定义的DataNotFoundException业务异常的编码和信息。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oi1xB2oLsGW0Oqq0eTffcNpg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券