如何保证一个组合结构的接口逻辑单个异常不回影响整体,求推荐好的实践

2020-06-24 17:23:35 +08:00
 lnanddj

常见的架构,API 接入层上需要将多个数据源组合吐出。前面获取的数据,是后面的依赖。

有没有一种比较优雅点的方式,可以避免某个小功能点的代码 /数据异常导致的异常导致整体数据无法吐出。

针对每个功能点 try...catch... 确实不太优雅,也难以维护。

全局的异常捕获也无法完成这样的需求。

各位大佬,有没有自己的实践可以分享一下的?

1383 次点击
所在节点    Java
6 条回复
lnanddj
2020-06-24 17:26:40 +08:00
自己实现类似 FilterChain 的东西,然后针对 chain 的调用做 try...catch.. 貌似也可以,但是对于前后依赖的数据有点蛋疼
ldcloli
2020-06-24 17:39:39 +08:00
将每个功能点拆出来成一个单独任务,可以设置每个任务的前后依赖,设置返回数据的必要性,最后所有依赖的任务排列成有向无环图,并行执行
momocraft
2020-06-24 17:43:16 +08:00
Future / Either
crclz
2020-06-25 12:14:29 +08:00
前面的数据是后面的依赖...你前面数据都获取失败了,后面数据怎么获取?

对于每一个环节,尝试向数据源读取 3 次,如果 3 次失败,就抛出异常。

正常情况下是不会出现失败的,如果失败很多次,就报警发邮箱。
lnanddj
2020-06-25 20:57:17 +08:00
@crclz 只有最前面的数据核心数据是,后面有大批的组合逻辑,这个逻辑相对独立。需求核心是,保障核心数据安全。
重试是不适合的,1. 性能不允许(支持单机 1w 的 QPS ) 2. 有时候错误的数据或者代码的异常重试无法解决。
lnanddj
2020-06-25 21:04:29 +08:00
@ldcloli 嗯,方案可以考虑一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX