记一次Dubbo的异常处理过程。

现象:业务团队报送,服务端定义一个BuinessException,继承与RunTimeException,服务端执行时抛出该异常,但是客户端捕捉不到该异常。

记录:把代码down下来,开始模拟,发现客户端收到了Exception,但是却是RunTimeException,直觉感觉可能是Dubbo的异常处理这一块儿出了问题,或者是我们的服务端没有按照一定的规则书写,看了服务端的接口方法签名,发现没有显示的抛出异常,直觉感觉,如果是没有显示的抛出异常,该接口在被Dubbo的动态代理执行invoke方法时,能获取到ExceptionType吗?答案,感觉是不能的。

另写一套代码保证模拟,竟然是能捕捉到的。为什么呢?下文解释。

如果获取不到,Dubbo会怎么处理呢?是不是会new 一个 RunTimeException返回回来呢?我们带着这些疑问看一下Dubbo的源码。

代码就在ExceptionFilter里面,我们打开看一下其实就很清楚了。

这个invoke方法时服务端的代理(Dubbo的动态代理也有点儿意思,改天咱们再写一个)对象代码的执行方法,那可以通过method拿到相关异常信息。

1、判断是否不是RunTimeException 并且 没有实现GengricService。我们没有,所以没有返回我们的BuinessException。

2、如果是check异常直接返回,我们也不是。所以没有返回我们的BuinessException。

3、

如果方法上有显示抛出,直接返回,很不幸,我们恰巧少了。

4、如果在同一个jar包里,直接返回(这个就是我们单写的为什么成功的原因)

5、Jdk的直接返回异常,我们自定义的。

6、Dubbo本身的,直接返回,我们不是。

7、所以,最后我们被new 了一个 RunTimeException 回来。

总结,其实是有日志的,只不过没有见过,然后也大意忽略了。

解决方案,将没有添加异常抛出的方法加上(造成上游调用端修改,需要一样抛出或者try/catch,那也是没办法的事,接口本来定义的就不规范)

转载于:https://www.cnblogs.com/yidiandhappy/p/10762483.html

Dubbo的异常处理相关推荐

  1. dubbo全局异常处理_基于spring aop的dubbo异常统一处理

    dubbo统一异常处理,调用方只显示封装后的异常. 1.返回封装后的Exception 2.返回封装后的统一返回信息 import org.aspectj.lang.annotation.AfterT ...

  2. dubbo全局异常处理_详解Dubbo无法处理自定义异常及解决方案

    问题描述 Dubbo有一个比较奇怪的问题,目前不知道Apache和Alibaba公司出于什么样的考虑,貌似一直都没有一个比较合适的解决方案,问题如下: 项目搭建中你需要自定义一个本地的Exceptio ...

  3. Dubbo封装异常处理Filter报AppResponse represents an concrete business response解决方案

    CompletableFuture b = new CompletableFuture (); AsyncRpcResult asyncRpcResult = new AsyncRpcResult(b ...

  4. dubbo全局异常处理_Dubbo 学习1——Service自定义异常捕获不到问题

    阅读:[<面试官问我,使用Dubbo有没有遇到一些坑?我笑了.>](https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=22 ...

  5. dubbo自定义异常传递信息丢失问题解决

    访问我的博客 目前计划对已有的单体项目进行组织架构拆分,调研了分布式系统中常用中间件 Dubbo 和 Spring Cloud,选择了 Dubbo,可以对当前现有项目进行平滑升级改造.但是一开始就遇到 ...

  6. c++ 外部组件发生异常_谁再悄咪咪的吃掉异常,我上去就是一 JIO

    又到周末了,周更选手申请出站~ 这图太魔性了啊 这次分享一下上个月碰到的离奇的问题.一个简单的问题,硬是因为异常被悄咪咪吃掉,过关难度直线提升,导致小黑哥排查一个晚上. 这个美好的晚上,本想着开两把 ...

  7. view [bootstrap-4] not found如何解决_Dubbo如何处理业务异常,这个一定要知道哦

    前言 我们在开发应用系统时,不可避免的要使用到我们自己定义的异常,所以我们一般通常会用到自定义的业务异常类BusinessException,这个异常会继承extends RuntimeExcepti ...

  8. 学习笔记-B/S - Exploits

    B/S - Exploits 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 大纲 各类论坛/CMS框架 AEM 74CMS dedeC ...

  9. 2019 年博客总结

    这一年的博客才写了两页多一点,总是能看到 2018 年博客总结,总觉得还没过多久,没想到这么快又一年了.去年写总结时似乎还精力充沛,如今想在业余时间写个博客,更新下开源项目,都得找孩子睡觉的时间,孩子 ...

最新文章

  1. 对相机所看的视角截屏保存为图片
  2. 150名打工人被AI判定效率低遭开除,“属实是人工智能,能治工人“
  3. Practical Vim 第一章 第二章
  4. CF650C Table Compression
  5. 青茶什么时候拆_为什么铁观音这么香?到底有没有添加香精?看完你就知道了...
  6. android开发学习之路——连连看之游戏逻辑(五)
  7. kaggle notebook中免密码进行push
  8. Thread 类的属性和方法
  9. sklearn 中的 Iris 数据集
  10. 计算机房通气换气次数,不知道换气次数如何确定?各种换气次数汇总,暖通设计师的宝典...
  11. 新浪云HTML播放音乐,音乐播放器-html代码
  12. 人工智能和机器视觉技术学习培训设备
  13. Photoshop照片模糊变清晰大全
  14. 【DevOps研发管理方案】一:方案简介
  15. PNP三极管作为开关管如何使用(集电极接 负载)
  16. java 重量单位换算_JAVA中数据存储方式以及单位转换
  17. python飞机大战概要设计_飞机大战展示.ppt
  18. 详细解读Latent Diffusion Models:原理和代码
  19. C++动态库dll生成及调用总结
  20. Java云同桌学习系列(十九)——Linux系统

热门文章

  1. zzuli OJ 1127: 矩阵乘积
  2. 这是最好的年代,也是最坏的年代?
  3. 大疆妙算Manifold刷机换源,cuda,opencv,qt配置以及实现opencv读取usb摄像头,qmake nvcc交叉编译
  4. SDOI R2 咕咕记
  5. 健身耳机哪个好、最好的健身耳机推荐
  6. java环形buff_环形缓冲区.ringbuff(C#和java)
  7. 2019春第二次课程实际实验报告
  8. 2022-07-13 第七小组 闫馨月 学习笔记
  9. QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)
  10. sdnu.1026 田忌赛马续