• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

dubbo参数校验和amp;统一异常转response处理

武飞扬头像
水心可乐
帮助1

官方的参数校验方法

https://cn.dubbo.apache.org/zh-cn/docs/advanced/parameter-validation/

目标:能把参数校验异常、自定义异常转化为自定义的response结构。

目标A:增加统一异常处理:

可以把Fitler文件中定义的加入到<dubbo:provider filter="xxx"> 也可以直接用@Active

这样之后发现普通的抛出异常可以catch,但是参数校验的异常直接catch不到,原因大概是默认的参数校验filter在异常处理filter之前就返回了。

目标B:为了能把异常统一转化为response:

第一种方案:直接实现一个参数校验filter,在其中转换为response

Dubbo服务如何优雅的校验参数_51CTO博客_dubbo指定服务提供者

第二种方案:把官方的全局异常处理放到最前面

https://www.cnblogs.com/mumuxinfei/p/9231310.html

存在的问题有:

1)自定义异常会在dubbo自带的ExceptionFIlter中被转成runtimeException,见

https://blog.csdn.net/zidongxiangxi/article/details/108098173

2)validation异常会包在rpcException里面,见官方实例

参数校验 | Apache Dubbo

因此只能采用方案一:自定义exceptionFilter取代自带的异常处理,也可以在dubbo自带的基础上增加转换response的逻辑

网上还看到自定义的fitler可以覆盖自带filter ,但是实测有问题:会走到ExtensionLoader的判重逻辑里面,报

Duplicate extension

 参考阅读 使用dubbofiler实现日志调用链追踪

附:filter加载过程

1)ExtensionLoader.loadExtensionClasses

  1.  
    loadFile(extensionClasses, DUBBO_INTERNAL_DIRECTORY);
  2.  
    loadFile(extensionClasses, DUBBO_DIRECTORY);
  3.  
    loadFile(extensionClasses, SERVICES_DIRECTORY);

会读读取各个jar包和代码中的META-INF

先读内部的,再读外部的。最候用filter文件中的key value,放进

2)在getActivateExtension中,对每个接口去组装filter链

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgggbaa
系列文章
更多 icon
同类精品
更多 icon
继续加载