|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Dubbo如何处理业务异常,这个一定要知道哦" |
| 4 | +date: 2024-04-01T19:49:54+0800 |
| 5 | +description: "文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!" |
| 6 | +keywords: "dubbo runtimeexception" |
| 7 | +categories: ['未分类'] |
| 8 | +tags: ['Dubbo'] |
| 9 | +artid: "137244520" |
| 10 | +arturl: "https://blog.csdn.net/2303_77877769/article/details/137244520" |
| 11 | +image: |
| 12 | + path: https://api.vvhan.com/api/bing?rand=sj&artid=137244520 |
| 13 | + alt: "Dubbo如何处理业务异常,这个一定要知道哦" |
| 14 | +render_with_liquid: false |
| 15 | +featuredImage: https://bing.ee123.net/img/rand?artid=137244520 |
| 16 | +featuredImagePreview: https://bing.ee123.net/img/rand?artid=137244520 |
| 17 | +cover: https://bing.ee123.net/img/rand?artid=137244520 |
| 18 | +img: https://bing.ee123.net/img/rand?artid=137244520 |
| 19 | +--- |
| 20 | + |
| 21 | + |
| 22 | + |
| 23 | +# Dubbo如何处理业务异常,这个一定要知道哦! |
| 24 | + |
| 25 | + |
| 26 | + |
| 27 | + |
| 28 | +部署运行你感兴趣的模型镜像一键部署 |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | +运行,输入不存在的goodsID,**我们期望我们自定义的异常类被我们拦截到,并做一些处理;但是provider生产端抛给消费者的异常竟然是RuntimeException**,只是里面的message是我们的业务异常调用栈信息。如下: |
| 33 | + |
| 34 | + |
| 35 | + |
| 36 | +不是我们希望的抛给消费者端是DataNotFoundException异常。导致我们消费端没法针对不同的业务进行不同的处理。消费端做了SpringMVC的异常处理返回了: |
| 37 | + |
| 38 | + |
| 39 | + |
| 40 | +上面的code为1401,是系统异常编码,并不是DataNotFoundException编码。 |
| 41 | + |
| 42 | +**我们定义的DataNotFoundException的编码为:1001** |
| 43 | + |
| 44 | +##### 为什么产生 |
| 45 | + |
| 46 | +我们来看看dubbo的源码进行分析,如果Dubbo的 **provider端** 抛出异常(Throwable),则会被 provider端 的ExceptionFilter拦截到,执行以下invoke方法,**里面有个实现Listener类,重写了onResponse。** |
| 47 | + |
| 48 | + |
| 49 | + |
| 50 | +我们来分析一些代码: |
| 51 | + |
| 52 | +if (appResponse.hasException() && GenericService.class != invoker.getInterface()) |
| 53 | + |
| 54 | +上面代码的含义就是 **如果有异常并且未实现GenericService接口**,进入后续判断逻辑,否则直接返回结果。 |
| 55 | + |
| 56 | + |
| 57 | + |
| 58 | +上面代码的含义就是 **不是RuntimeException类型的异常,并且是受检异常(继承Exception),直接抛出。** |
| 59 | + |
| 60 | + |
| 61 | + |
| 62 | +上面代码的含义就是 **在方法签名上有声明,直接抛出。** |
| 63 | +  |
| 64 | + |
| 65 | +上面代码的含义就是 **如果异常类和接口类在同一个jar包中,直接抛出。** |
| 66 | +  |
| 67 | + |
| 68 | +上面代码的含义就是 **以java.或javax.开头的异常直接抛出。** |
| 69 | +  |
| 70 | + |
| 71 | +上面代码的含义就是**dubbo自身的异常,直接抛出。** |
| 72 | +  |
| 73 | + |
| 74 | +**不满足上述条件,会做toString处理并被封装成RuntimeException抛出。** |
| 75 | + |
| 76 | +现在我们知道了 **为什么我们自定义的异常,没有正确的抛出,**这个是因为上面的几个条件,我们都没有满足,**所以最后dubbo把它封装成了RuntimeException。** |
| 77 | + |
| 78 | +##### 如何解决 |
| 79 | + |
| 80 | +解决方法就针对上面的几个条件进行,有几种方案,我们一一看一下: |
| 81 | + |
| 82 | +**1、将该异常的包名以java.或者javax.开头** |
| 83 | + |
| 84 | +这个方案不现实,也不符合规范,所以不采用 |
| 85 | + |
| 86 | +**2、业务异常继承Exception,变为checked异常** |
| 87 | + |
| 88 | +自定义的业务异常本身属于RuntimeException,所以也不采用 |
| 89 | + |
| 90 | +**3、异常类和接口类在同一jar包里** |
| 91 | + |
| 92 | +较大的项目一般都会有一些common包,定义好异常类型,使用二方包的方式引用,所以也不适用 |
| 93 | + |
| 94 | +**4、provider的api明确写明throws XxxException** |
| 95 | + |
| 96 | +作为生产服务端,不应显式抛出异常给客户的进行处理,所以也不适用 |
| 97 | + |
| 98 | +##### 最终方案 |
| 99 | + |
| 100 | +以上方案都不合适,我们这里介绍个最终的方案,即采用dubbo的filter重写,dubbo的异常处理。 |
| 101 | + **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。** |
| 102 | + |
| 103 | +**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** |
| 104 | + |
| 105 | +**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。** |
| 106 | + |
| 107 | + |
| 108 | + |
| 109 | + |
| 110 | + |
| 111 | +**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!** |
| 112 | + |
| 113 | +**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!** |
| 114 | + |
| 115 | +**如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)** |
| 116 | + |
| 117 | + |
| 118 | + |
| 119 | +#### 最后 |
| 120 | + |
| 121 | +**文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。** |
| 122 | + |
| 123 | +**《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》**,**[点击传送门即可获取!](https://bbs.csdn.net/topics/618164986)** |
| 124 | + |
| 125 | +**《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》**,**[点击传送门即可获取!](https://bbs.csdn.net/topics/618164986)** |
| 126 | + |
| 127 | +您可能感兴趣的与本文相关的镜像 |
| 128 | + |
| 129 | + |
| 130 | + |
| 131 | +Stable-Diffusion-3.5 |
| 132 | + |
| 133 | +图片生成 |
| 134 | + |
| 135 | +Stable-Diffusion |
| 136 | + |
| 137 | +Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率 |
| 138 | + |
| 139 | +一键部署运行 |
| 140 | + |
| 141 | + |
| 142 | + |
0 commit comments