LiteFlow学习三之业务编排处理之外

简介: LiteFlow学习三之业务编排处理之外

       前面我们已经了解了串行编排和并行编排,了解了两者的执行逻辑,同时都是建立在这两者正常执行情况下,执行的逻辑。那么如果出现chain执行的一系列流程如果出现了异常,此时就需要进行回滚了。如果出现错误或者成功,我们还需要做一些额外的动作的时候,都需要以此为依据来进行的时候,liteflow又是如何处理和留给我们扩展的口子的呢?因此我们来了解一下rollback、onSuccess方法、onError方法是如何执行的。

一、异常回滚的逻辑处理入口

前面我们已经知道,通过chain获取对应的condition,然后通过condition拿到对应的nodeComponent。因此,在处理的过程中,需要对chain.execute(slotIndex)这个方法调用执行try...catch操作。此时可以看到如果当前chain不为空,则此时会打印错误的信息。方便后续日志排查使用。如果为空,依然会进行日志的打印记录。

接着我们可以看到会对槽的信息进行判断,然后设置异常信息。

完成后,会通过槽来获取执行的步骤,也即executeSteps执行步骤。

Deque<CmpStep> executeSteps = slot.getExecuteSteps();
      try {
        Iterator<CmpStep> cmpStepIterator = executeSteps.descendingIterator();
        while(cmpStepIterator.hasNext()) {
          CmpStep cmpStep = cmpStepIterator.next();
          if(cmpStep.getInstance().isRollback()) {
            Rollbackable rollbackItem = cmpStep.getRefNode();
            // 进行回滚
            rollbackItem.rollback(slotIndex);
          }
        }
        //如果出现异常,则打印异常
      } catch (Exception exception) {
        LOG.error(exception.getMessage());
      }
      finally {
        //最终打印回滚步骤
        slot.printRollbackStep();
      }

这里是回滚的主体逻辑。

二、异常逻辑回滚

因此我们需要着重去了解rollback做了什么事情。也即迭代的rollbackItem.rollback(slotIndex)做了什么事情。

首先会把线程属性赋值给组件对象NodeComponent对象。有了nodeComponent的信息之后,执行回滚操作,此时会执行self.rollback()。在此之前会获取槽,然后创建步骤对象cmpStep,添加tag和实例对象、回滚步骤,然后执行回滚操作。可以看到这个方法在是在NodeComponent中的rollback()方法,此时会调用我们自定义的回滚方法,执行回滚动作,也即我们在继承NodeComponent的时候,除了重写process方法之外,还需要重新rollback方法,来执行我们的回滚逻辑,这段逻辑需要我们在业务系统实现。

    public void rollback() throws Exception{
    // 如果需要失败后回滚某个方法,请覆盖这个方法
    };

    完成回滚之后,执行移除,也即removeSlotIndex和removeRefNode。

    三、异常回滚之外

    当然除此之外,我们还可以实现对应的onSuccess方法、onError方法。可以看到在NodeComponent类中,我们可以看到这两个方法都存在,我们都可以选择性的复写,来保证业务的正常执行之外,异常的补偿或者处理等。

    onSuccess方法

    public void onSuccess() throws Exception {
    // 如果需要在成功后回调某一个方法,请覆盖这个方法
    // 全局切面只在spring体系下生效,这里用了spi机制取到相应环境下的实现类
    // 非spring环境下,全局切面为空实现
    CmpAroundAspectHolder.loadCmpAroundAspect().onSuccess(this.self);
    }

    onError方法

    public void onError(Exception e) throws Exception {
    // 如果需要在抛错后回调某一段逻辑,请覆盖这个方法
    // 全局切面只在spring体系下生效,这里用了spi机制取到相应环境下的实现类
    // 非spring环境下,全局切面为空实现
    CmpAroundAspectHolder.loadCmpAroundAspect().onError(this.self, e);
    }

    我们可以对其进行复写,来实现自己的逻辑。

    除此之外,还有一些其他的方法,比如:isContinueOnError出错是否继续执行、isAccess是否进入该节点、是否结束整个流程(不往下继续执行)。

    这些都是liteflow提供给我们的。

    参考:https://gitee.com/dromara/liteFlow

              https://liteflow.cc/


    目录
    相关文章
    |
    4月前
    |
    XML Java 数据库
    在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
    【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
    63 3
    |
    6月前
    |
    运维 自然语言处理 监控
    软件研发核心问题之在需求拆解过程中,“需要多少UI”的问题如何解决
    软件研发核心问题之在需求拆解过程中,“需要多少UI”的问题如何解决
    |
    6月前
    软件研发核心问题之在需求拆解过程中,“数据与UI如何关联”的问题如何解决
    软件研发核心问题之在需求拆解过程中,“数据与UI如何关联”的问题如何解决
    |
    8月前
    |
    运维 负载均衡 API
    构建高效微服务架构的七大关键策略
    【5月更文挑战第27天】 在当前企业级应用开发中,微服务架构已成为实现敏捷、可扩展和灵活部署的主流解决方案。本文将深入探讨构建和维护一个高效微服务系统的七个关键策略,包括服务划分原则、API网关设计、服务发现与注册、配置管理、熔断机制、分布式跟踪及持续集成和部署。这些策略不仅有助于提升系统的稳定性和弹性,还能确保在不断变化的业务需求面前,系统能够快速响应并保持高效的运行状态。
    |
    开发框架 运维 Cloud Native
    KubeNest - 运维特征(Trait)配置化开发框架设计及实践
    Trait配置化开发框架,提供了云原生应用在不同运行环境下使用不同运维能力可插拔架构,同时该框架首创去Operator的开发模式(配置化),能够极大缩短开发人员学习、开发成本,提高运维效率,减少资源浪费,同时还能保障数据一致性、安全可靠。目前该方案已经经过双十一的验证,能够保障云原生应用的多云异构资源的部署运维稳定性。
    495 2
    KubeNest - 运维特征(Trait)配置化开发框架设计及实践
    |
    数据库
    易搭工作流引擎用是什么开源 还是阿里自研产品,零代码平台场景页面映射数据库表是动态创建,采用什么框架处理,怎么让系统产生高并发能力。易搭权限有没有了解,求解。
    易搭工作流引擎用是什么开源 还是阿里自研产品,零代码平台场景页面映射数据库表是动态创建,采用什么框架处理,怎么让系统产生高并发能力。易搭权限有没有了解,求解。
    |
    人工智能 数据可视化 前端开发
    如何用smardaten无代码平台进行复杂逻辑编排?
    如何用smardaten无代码平台进行复杂逻辑编排?
    「业务架构」定义业务能力-备忘单
    「业务架构」定义业务能力-备忘单
    |
    存储 JSON 前端开发
    逻辑编排在优酷可视化搭建中的实践(一) - 逻辑与Runtime
    页面可视化搭建系统从16年开始如雨后春笋般涌现而出,从活动页搭建到中后台搭建,有开源有仅公司内部使用的,都致力于将前端从繁复的体力劳动中解脱出来,提高页面生产效率。优酷内部也有一套营销活动搭建系统,每年生产2K+活动页;能够满足这么多页面的需求,除了沉淀了大量可复用的组件外,围绕着搭建系统的前端研发每天都在不停地维护升级老的组件,同时生产新的组件。
    480 1
    逻辑编排在优酷可视化搭建中的实践(一) - 逻辑与Runtime
    |
    JSON 数据可视化 前端开发
    逻辑编排在优酷可视化搭建中的实践(二) - 编排器与业务
    说到逻辑编排大家应该都不陌生了,目前我们集团有多面向后端的逻辑编排技术专项,且没有统一的标准、沉淀通用的方案。也有前端逻辑编排项目,但均面向前端开发提效的逻辑编排,而我们是要打造一个面向非研发人员,可让他们根据图形化组件搭建出逻辑的平台。
    668 0
    逻辑编排在优酷可视化搭建中的实践(二) - 编排器与业务