java rpc框架 中的自定义异常类型的全局处理
– 这里的dubbo 可泛指 所有rpc框架
–比如自定义异常类型是MyEx, 以及myEx可以转化为MyResult
– 需求: 凡是请求链路中抛出的MyEx需要自动及时或最终转化为 自定义的MyResult返回
– 1. spring 提供 controller端的全局异常捕获. 这一步简单
– 2. dubbo 需要 将MyEx 传输回来
这里就有点需要考虑的, 因为
dubbo 第一要义是不能违反序列化异常, 序列化成功的前提是dubbo上下游双方起码都要有这个异常类型, 才能放心的回传, 不然provider抛出一个只在provider有的异常类, 在consumer端是没有这个异常类的, 自然类加载反射序列化都会失败 (ps: 虽然 dubbouble双方是是面向同一方法签名(接口)的(即使返回子类也是强转成父类, 隐藏子类域 todo 这里研究下 consumer如果是独有的子类, 这个dubbo序列化和反序列化会怎们做), 但是方法签名可限制不住人家consumer抛什么具体类型的异常)
所以dubbo的做法:
当然可以直接全部 new RuntimeException(StringUtils.toString(exception)), 但这样太粗鲁了.
问题的关键, 就是 provider端到底一定依赖
1.“directly throw if it’s checked exception”:意思就是说,如果该异常是检查型异常,则直接抛出
2.“directly throw if the exception appears in the signature”:大概意思是,如果接口的方法声明中抛出了该异常,则直接抛出
3.“for the exception not found in method’s signature, print ERROR message in server’s log”:意思是,如果接口的方法中没有声明该异常,则打印ERROR日志
4.“directly throw if exception class and interface class are in the same jar file”:大概意思是:如果异常类和接口类在同一个jar中,则直接抛出
5.“directly throw if it’s JDK exception”:意思是,如果是JDK中的异常,则直接抛出
6.“directly throw if it’s dubbo exception”:如果是dubbo的异常,则直接抛出
7.“otherwise, wrap with RuntimeException and throw back to the client”:否则,包装成RuntimeException抛出给客户端
原文链接:https://blog.csdn.net/shuux666/article/details/123889835
– 所以 仅仅dubbo自带的异常转换是无法完成这一点的.
– 我们需要 dubbo统一异常处理 (实现dubbo的filter , 或者直接spring 的aop)
- https://www.cnblogs.com/zcz527/p/7655235.html
把捕获到的 MyEx信息 , 转化为 MyResult (前提是 dubbo方法声明的返回值类型是MyResult了 , 不然也没有办法转(方法签名不一致, 转了后provider端解析就会报错), 这就是开发手册为啥规定建议rpc一定要 MyResult的原因之一吧 )… 如果不是MyResult的类型, 就没法办了

相关文章:
java rpc框架 中的自定义异常类型的全局处理
– 这里的dubbo 可泛指 所有rpc框架 –比如自定义异常类型是MyEx, 以及myEx可以转化为MyResult – 需求: 凡是请求链路中抛出的MyEx需要自动及时或最终转化为 自定义的MyResult返回 – 1. spring 提供 controller端的全局异常捕获. 这一步简单 – 2. dubbo 需要 将MyEx 传输回来…...
面试题:Redis的内存策略
1 Redis内存回收Redis之所以性能强,主要原因是基于内存存储,然而单节点的Redis内存不易过大,会影响主从同步和持久化性能我们可以通过修改配置文件设置Redis的最大内存:当内存存储到上限时,就无法存储更多的数据了。1.…...
idea中使用Git
目录 一、在idea中配置Git 1、打开settings,搜索git,找到本地上的git安装目录,选择git.exe 2、本地git安装目录 二、获取Git 1、本地初始化仓库 2、选中项目这层目录,点击确定 2、从远程仓库克隆 三、本地仓库操作 1、将文…...
C++派生类指针赋值给基类指针问题(虚函数和非虚函数不同)
概念 上行转换:把派生类的指针或引用转换成基类表示,简单来说就是子类指向父类 下行转换:把基类指针或引用转换成派生类表示,简单来说就是父类指向子类 上行转换是安全的的,下行转换是不安全的(最好使用…...
数据库实践LAB大纲 04 触发器
游标 系统为用户开设的一个数据缓冲区 —— 存T-SQL语句从数据库检索出来的结果集 对结果集处理:结果集一条条提取记录,这时要用游标 使用 利用基于变量的select into语句,只能处理单条记录使用游标循环处理 声明游标: DECLA…...
Win10系统电脑开机后总是蓝屏无法使用怎么办?
Win10系统电脑开机后总是蓝屏无法使用怎么办?电脑开机的时候出现了蓝屏问题,这个情况是我们的电脑系统不兼容导致的。遇到这个问题一般是需要去进行系统的重装来解决,安装一个更兼容的系统就可以解决问题了。一起来看看详细的解决方法分享吧。…...
Node——使用nvm切换node版本
1. 下载mvn安装包 https://pan.baidu.com/s/1alfyRvwVWr_TrkN0A9Er5g?pwd1v7c 2. 安装后命令输入mvn -v 验证是否安装成功 3. mvn命令 nvm list available 显示可下载的版本nvm install [node版本号] 显示可下载的版本nvm uninstall [node版本号] 删除已安装的指定版本nvm…...
go语言实现的一个基于go-zero框架的微服务影院票务系统cinema-ticket
一个基于go-zero框架的微服务影院票务系统cinema-ticket 前言 项目基本介绍 项目开源地址:butane123/cinema-ticket: 一个基于go-zero框架的微服务影院票务系统cinema-ticket (github.com) 这是一个微服务影院票务系统,基于go-zero框架实现,…...
ArcGIS API for JavaScript 4.15系列(3)——Dojo中的css样式操作
1、前言 前一篇博客介绍了Dojo中基础的dom操作方法,主要是针对html中的常用标签和属性进行操作。而一个优秀的线上网站自然也离不开css样式的从旁辅助。在实际开发过程中,我们经常会遇到需要动态修改css样式的问题,本文就来介绍一下如何在Do…...
“赶快回家网”首页制作
“赶快回家网”首页制作一、实验名称:二、实验日期:三、实验目的:四、实验内容:五、实验步骤:六、实验结果:七、源程序:八、心得体会:一、实验名称: “赶快回家网”首页…...
JavaWEB-Servlet
目录 Servlet简介Servlet快速入门Servlet配置详解ServletContext 1 Servlet简介 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码&a…...
springboot集成mqtt
引入jar包 <dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-mqtt</artifactId> </dependency> <dependency><groupId>com.alibaba</groupId><artifactId>fastjs…...
Lecture3 梯度下降(Gradient Descent)
目录 1 问题背景 2 批量梯度下降 (Batch Gradient Descent) 3 鞍点(Saddle Point) 3 随机梯度下降 (Stochastic Gradient Descent) 4 小批量梯度下降 (Mini-batch Gradient Descent) 1 问题背景 图1 上节课讲述的穷举法求最优权重值在Lecture2中,介绍了使用穷举…...
深入了解DSP
一、时钟和电源 问:DSP的电源设计和时钟设计应该特别注意哪些方面?外接晶振选用有源的好还是无源的好? 答:时钟一般使用晶体,电源可用TI的配套电源。外接晶振用无源的好。 问:TMS320LF2407的A/D转换精度保证…...
Flink反压如何排查
Flink反压利用了网络传输和动态限流。Flink的任务的组成由流和算子组成,那么流中的数据在算子之间转换的时候,会放入分布式的阻塞队列中。当消费者的阻塞队列满的时候,则会降低生产者的处理速度。 如上图所示,当Task C 的数据处…...
windows无法访问指定设备路径或文件怎么办?2个解决方案
有时候Win10电脑打不开程序或文件,windows无法访问指定设备路径或文件该怎么办?原因是什么呢?一般导致这种情况的出现,大多是因为我们的电脑缺乏相应的查看权限,我们只需要通过赋予权限就可以解决这个难题了。 操作环境…...
冷知识|鹤顶红还能用来修长城?
大家好,我是建模助手。 在上篇浅浅地蹭了波热点之后,我灵机一动,倒不如也搞一搞建筑方面的冷知识?冷热搭配,事半功倍... 问问大家,如果谈起古建筑,关键词都有什么?是庄严、震撼、壮…...
【GD32F427开发板试用】在IAR环境中移植RTX5
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:吴金刚 0.前言 首先感谢极术社区和兆易创新给了这次试用GD32F427开发板的机会。 板子做的虽然简约,但是自带了GD-link所以一根USB…...
MySQl学习(从入门到精通15)
MySQl学习(从入门到精通15)第 18 章_MySQL 8 其它新特性1. MySQL 8 新特性概述1. 1 MySQL 8. 0 新增特性1. 2 MySQL 8. 0 移除的旧特性2. 新特性 1 :窗口函数2. 1 使用窗口函数前后对比2. 2 窗口函数分类2. 3 语法结构2. 4 分类讲解1. 序号函…...
前端构建工具 Vite
文章目录参考环境构建工具构建工具的主要功能目前主流的前端构建工具Vite为什么使用 Vite冷启动WebpackVite热更新优化热更新优化预构建依赖Webpack VS ViteVite 的缺点首屏性能懒加载与 Vite 相关的基本操作获取create-vite创建项目Project nameSelect a frameworkSelect a va…...
3分钟快速搞定Windows苹果设备驱动安装:Apple-Mobile-Drivers-Installer终极指南
3分钟快速搞定Windows苹果设备驱动安装:Apple-Mobile-Drivers-Installer终极指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: h…...
如何利用WinRAR分卷压缩,轻松突破大文件传输限制
1. 为什么需要分卷压缩? 在日常工作和生活中,我们经常会遇到需要传输大文件的情况。比如设计师要发送PSD源文件给客户,程序员要分享开发环境的镜像,或者普通用户想通过邮件发送高清视频给亲友。但几乎所有主流传输平台都对单个文件…...
自动化营销系统:高效破解市场-SDR销售线索流转堵点
在B2B营销中,线索从“获取”到“转化”的过程,往往伴随着大量的手动操作、信息断层和跟进滞后。尤其是市场团队与SDR(销售开发代表)之间的协作,常常成为线索流转的“瓶颈”。如何高效、规范地将市场获取的Leads转化为可…...
开源浏览器扩展SubLens:集中管理AI订阅账单,告别遗忘扣费
1. 项目概述:一个浏览器扩展,帮你管好AI订阅账单 不知道你有没有这种感觉,每个月信用卡账单出来的时候,总有几个“熟悉的陌生人”——那些你为了尝鲜或者工作需要而订阅的AI服务,比如ChatGPT Plus、Claude Pro、GitHub…...
5分钟免费安装终极Markdown阅读器:浏览器最强文档查看解决方案
5分钟免费安装终极Markdown阅读器:浏览器最强文档查看解决方案 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer Markdown Viewer是一款功能强大的浏览器扩展࿰…...
告别英文界面:RedHat 6.3 桌面环境汉化原理与手动配置详解
从底层机制到实战:RedHat 6.3 桌面环境深度汉化指南 第一次在终端里看到满屏英文报错时,我盯着那个"Permission denied"愣了半天——明明昨天刚装好的系统,怎么连个中文提示都没有?这种经历恐怕是很多国内Linux用户的共…...
从一次失败的模型交付说起:我是如何用random_state拯救项目复现的
从一次失败的模型交付说起:我是如何用random_state拯救项目复现的 那是一个周五的下午,团队群里的消息突然炸开了锅。"你确定这是同一个模型?测试集AUC从0.92跌到0.68了!"看着同事发来的对比截图,我的后背瞬…...
番茄小说下载器完整指南:如何轻松搭建个人离线图书馆
番茄小说下载器完整指南:如何轻松搭建个人离线图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 还在为网络不稳定无法畅读番茄小说而烦恼吗?番茄小…...
3步掌握NBTExplorer:从Minecraft数据恐惧到编辑专家的完整指南
3步掌握NBTExplorer:从Minecraft数据恐惧到编辑专家的完整指南 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经面对Minecraft的level.dat文件…...
Midjourney油彩模式正在悄悄升级!内部测试通道流出的--oil-mode beta参数文档(含笔触方向控制与亚麻布基底模拟指令)
更多请点击: https://intelliparadigm.com 第一章:Midjourney油彩模式的演进脉络与beta通道解密 Midjourney 的油彩模式(Oil Painting Mode)并非官方命名的功能,而是社区对一组特定风格化参数组合的统称,…...
