🐋组件回滚
LiteFlow从v2.11.0开始支持了组件回滚功能。
LiteFlow中组件对异常的处理方法有以下三种:组件中的continueOnError
方法、EL表达式中设置ignoreError
以及RL表达式中设置CATCH
关键字。如果这三种条件均不满足并且出现了异常,那么流程就会执行失败,触发回滚的逻辑。使用rollback功能的前提需要对LiteFlow的异常处理机制具有一定的了解。
# 回滚触发前提
在实际应用场景中,组件的执行流程会因为各种突发情况导致失败,所以组件需要一种能在流程执行失败之后对流程进行处理的机制,因此LiteFlow新增了回滚功能。
在流程执行失败,并且存在异常时会自动触发回滚机制,回滚机制会按照已经执行的组件的逆序执行其中的rollback方法。
对于逆序执行,请参照下面的示例:
图示
如果上述全部组件均重写了rollback方法,在d中出现异常, 并且执行顺序为并且执行顺序为:a -> b -> c -> d的话,回滚顺序将会是:d -> c -> b -> a。
# 基本用法
@LiteflowComponent("a")
public class ACmp extends NodeComponent {
@Override
public void process() {
//do your biz
}
@Override
public void rollback() throws Exception {
DefaultContext context = this.getContextBean(DefaultContext.class);
//do your biz
}
}
与组件中的其他方法类似,在回滚事件中,随时可以获取自己定义的上下文。
# 注意事项
- 回滚的过程中只能回滚流程已经执行完的组件,并不可以回滚整个流程的全部组件。
- 回滚流程与正常执行流程相似,用户也可以在
LiteflowResponse
对象中通过相应的方法获取回滚流程的步骤信息以及执行时间等信息。
LiteflowResponse response = flowExecutor.execute2Resp("yourChainName", "arg");
String rollbackStepStr = response.getRollbackStepStr(); // 以字符串形式获取回滚流程
String rollbackStepStrWithTime = response.getRollbackStepStrWithTime();
Queue<CmpStep> rollbackStepQueue = response.getRollbackStepQueue(); // 获取回滚的组件的步骤信息
Map<String, List<CmpStep>> rollbackSteps = response.getRollbackSteps(); // 获取回滚组件的步骤信息
- 回滚过程中如果出现异常,不会打断回滚流程。
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/09, 18:39:17