V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lnanddj
V2EX  ›  Java

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

  •  
  •   lnanddj · 2020-06-24 17:23:35 +08:00 · 1527 次点击
    这是一个创建于 1613 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    正常情况下是不会出现失败的,如果失败很多次,就报警发邮箱。
    lnanddj
        5
    lnanddj  
    OP
       2020-06-25 20:57:17 +08:00
    @crclz 只有最前面的数据核心数据是,后面有大批的组合逻辑,这个逻辑相对独立。需求核心是,保障核心数据安全。
    重试是不适合的,1. 性能不允许(支持单机 1w 的 QPS ) 2. 有时候错误的数据或者代码的异常重试无法解决。
    lnanddj
        6
    lnanddj  
    OP
       2020-06-25 21:04:29 +08:00
    @ldcloli 嗯,方案可以考虑一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:16 · PVG 21:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.