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/


    目录
    相关文章
    |
    JavaScript 前端开发 Java
    liteflow规则引擎 执行Javascript脚本
    liteflow规则引擎 执行Javascript脚本
    420 1
    |
    Kubernetes Docker Windows
    『阿里云加速』Docker DeskTop安装kubernetes时一直停留在Starting处理方案
    📣读完这篇文章里你能收获到 - Docker DeskTop 安装K8S失败处理方案 - Docker 配置镜像加速器 - 数字签名的限制解除
    2148 0
    『阿里云加速』Docker DeskTop安装kubernetes时一直停留在Starting处理方案
    |
    运维 数据可视化 安全
    阿里巴巴DevOps实践指南(二十三)| 编排运维
    面向编排的运维是指用户(PaaS 服务以及开发、运维、运营等角色)根据实际业务需要,对多个原子组件通过简单编排的方式进行灵活装配,构造出不同的业务流程以便完成一个完整的运维需求。运维编排可以帮助我们更好地规范、管理和执行自动化运维操作,以模板的方式定义所需要进行的操作,然后再通过系统运行,从而提高整体运维操作的效率、增强运维操作的安全性,并避免人工运维的错误。
    阿里巴巴DevOps实践指南(二十三)| 编排运维
    |
    4月前
    |
    机器学习/深度学习 自然语言处理 API
    Qwen-MT:翻得快,译得巧
    今天,机器翻译模型Qwen-MT正式上线,支持92种语言互译,具备高度可控性与低延迟、低成本特点,适用于多种场景。开发者可通过Qwen API体验其强大翻译能力。
    1093 15
    |
    XML 测试技术 uml
    liteflow学习一
    liteflow学习一
    1146 0
    |
    4月前
    |
    数据采集 JavaScript 物联网
    智能工厂四大核心系统:ERP/PLM/MES/WMS规划架构图详解
    企业数字化转型需要构建ERP、PLM、MES、WMS等核心系统协同运作的完整体系。ERP整合企业资源管理,PLM管理产品全生命周期数据,MES实现车间生产执行管控,WMS优化仓储物流管理。各系统通过数据流紧密衔接:PLM为ERP提供BOM数据,ERP为MES下达生产计划,MES与WMS协同物料调度。
    |
    Linux 数据安全/隐私保护 Windows
    【JumpServer教程】简便添加Windows资产:JumpServer堡垒机使用指南
    本文是JumpServer堡垒机使用指南,介绍了如何在JumpServer中简便添加Windows资产的步骤,包括准备工作、开启Windows远程设置、在JumpServer中配置Windows资产以及授权使用。
    3303 1
    【JumpServer教程】简便添加Windows资产:JumpServer堡垒机使用指南
    |
    存储 缓存 NoSQL
    分布式架构下 Session 共享的方案
    【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求、系统架构和性能要求等因素,选择合适的 Session 共享方案。同时,还需要不断地进行优化和调整,以确保系统的稳定性和可靠性。
    611 55
    |
    前端开发
    基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
    基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
    1235 0
    |
    Java 编译器 测试技术
    全面理解Maven Compiler Plugin-Maven编译插件
    【10月更文挑战第16天】
    3148 1