mirror of
https://gitee.com/dromara/liteFlow.git
synced 2026-06-10 03:07:32 +08:00
bug #I8AR0L 组件定义了重试和回滚,回滚也会被重试
This commit is contained in:
@@ -35,6 +35,7 @@ import com.yomahub.liteflow.monitor.MonitorBus;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Deque;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* 普通组件抽象类
|
||||
@@ -158,13 +159,12 @@ public abstract class NodeComponent {
|
||||
|
||||
public void doRollback() throws Exception {
|
||||
Slot slot = this.getSlot();
|
||||
Deque<CmpStep> rollbackSteps = slot.getRollbackSteps();
|
||||
if(!CollUtil.isEmpty(rollbackSteps)) {
|
||||
for (CmpStep rollbackStep : rollbackSteps) {
|
||||
Node refNode = rollbackStep.getRefNode();
|
||||
if(refNode == this.getRefNode()) return;
|
||||
}
|
||||
|
||||
boolean alreadyRollback = slot.getRollbackSteps().stream().anyMatch(cmpStep -> cmpStep.getRefNode().equals(getRefNode()));
|
||||
if (alreadyRollback){
|
||||
return;
|
||||
}
|
||||
|
||||
CmpStep cmpStep = new CmpStep(nodeId, name, CmpStepTypeEnum.SINGLE);
|
||||
cmpStep.setTag(this.getTag());
|
||||
cmpStep.setInstance(this);
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.yomahub.liteflow.test.rollback.cmp;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LiteflowRetry;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component("m")
|
||||
@LiteflowRetry(5)
|
||||
public class MCmp extends NodeComponent {
|
||||
|
||||
private int flag = 0;
|
||||
@Override
|
||||
public void process() {
|
||||
if(flag < 2) {
|
||||
flag ++;
|
||||
throw new RuntimeException();
|
||||
}
|
||||
System.out.println("MCmp executed!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollback() throws Exception {
|
||||
System.out.println("MCmp rollback!");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.yomahub.liteflow.test.rollback.cmp;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LiteflowRetry;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component("n")
|
||||
@LiteflowRetry(3)
|
||||
public class NCmp extends NodeComponent {
|
||||
@Override
|
||||
public void process() {
|
||||
System.out.println("NCmp executed!");
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollback() throws Exception {
|
||||
System.out.println("NCmp rollback!");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.yomahub.liteflow.test.rollback.cmp;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LiteflowRetry;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
|
||||
@LiteflowRetry(5)
|
||||
public class MCmp extends NodeComponent {
|
||||
|
||||
private int flag = 0;
|
||||
@Override
|
||||
public void process() {
|
||||
if(flag < 2) {
|
||||
flag ++;
|
||||
throw new RuntimeException();
|
||||
}
|
||||
System.out.println("MCmp executed!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollback() throws Exception {
|
||||
System.out.println("MCmp rollback!");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.yomahub.liteflow.test.rollback.cmp;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LiteflowRetry;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
|
||||
@LiteflowRetry(3)
|
||||
public class NCmp extends NodeComponent {
|
||||
@Override
|
||||
public void process() {
|
||||
System.out.println("NCmp executed!");
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void rollback() throws Exception {
|
||||
System.out.println("NCmp rollback!");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user