From 6036b072925fb151108f3cbefd3353c8bcac8bb4 Mon Sep 17 00:00:00 2001 From: tangkc Date: Thu, 16 Jun 2022 18:01:56 +0800 Subject: [PATCH] =?UTF-8?q?feature=20#I5CJHI=20=E5=A2=9E=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89Id=E7=94=9F=E6=88=90=E5=99=A8=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RequestIdGeneratorException.java | 30 ++++++++++ .../flow/id/DefaultRequestIdGenerator.java | 17 ++++++ .../liteflow/flow/id/IdGeneratorHelper.java | 57 +++++++++++++++++++ .../liteflow/flow/id/RequestIdGenerator.java | 17 ++++++ .../liteflow/property/LiteflowConfig.java | 16 +++++- .../java/com/yomahub/liteflow/slot/Slot.java | 6 +- .../liteflow/springboot/LiteflowProperty.java | 13 ++++- .../LiteflowPropertyAutoConfiguration.java | 2 +- ...itional-spring-configuration-metadata.json | 7 +++ .../META-INF/liteflow-default.properties | 1 + .../com/yomahub/liteflow/test/BaseTest.java | 3 + .../LiteflowRequestIdSpringbootTest.java | 37 ++++++++++++ .../liteflow/test/requestId/cmp/ACmp.java | 25 ++++++++ .../liteflow/test/requestId/cmp/BCmp.java | 25 ++++++++ .../config/CustomRequestIdGenerator.java | 19 +++++++ .../requestId/application.properties | 2 + .../src/test/resources/requestId/flow.xml | 6 ++ .../com/yomahub/liteflow/test/BaseTest.java | 2 + .../LiteflowRequestIdSpringbootTest.java | 35 ++++++++++++ .../liteflow/test/requestId/cmp/ACmp.java | 13 +++++ .../liteflow/test/requestId/cmp/BCmp.java | 13 +++++ .../config/CustomRequestIdGenerator.java | 18 ++++++ .../src/test/resources/requestId/flow.xml | 10 ++++ .../com/yomahub/liteflow/test/BaseTest.java | 2 + .../LiteflowRequestIdSpringbootTest.java | 39 +++++++++++++ .../liteflow/test/requestId/cmp/ACmp.java | 25 ++++++++ .../liteflow/test/requestId/cmp/BCmp.java | 25 ++++++++ .../config/CustomRequestIdGenerator.java | 18 ++++++ .../requestId/application.properties | 2 + .../src/test/resources/requestId/flow.xml | 6 ++ .../com/yomahub/liteflow/test/BaseTest.java | 2 + .../LiteflowRequestIdSpringbootTest.java | 35 ++++++++++++ .../liteflow/test/requestId/cmp/ACmp.java | 25 ++++++++ .../liteflow/test/requestId/cmp/BCmp.java | 25 ++++++++ .../config/CustomRequestIdGenerator.java | 18 ++++++ .../test/resources/requestId/application.xml | 24 ++++++++ .../src/test/resources/requestId/flow.xml | 6 ++ 37 files changed, 617 insertions(+), 9 deletions(-) create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/exception/RequestIdGeneratorException.java create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/DefaultRequestIdGenerator.java create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/IdGeneratorHelper.java create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/RequestIdGenerator.java create mode 100644 liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java create mode 100644 liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java create mode 100644 liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java create mode 100644 liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java create mode 100644 liteflow-testcase-declare-component/src/test/resources/requestId/application.properties create mode 100644 liteflow-testcase-declare-component/src/test/resources/requestId/flow.xml create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java create mode 100644 liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java create mode 100644 liteflow-testcase-nospring/src/test/resources/requestId/flow.xml create mode 100644 liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java create mode 100644 liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java create mode 100644 liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java create mode 100644 liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java create mode 100644 liteflow-testcase-springboot/src/test/resources/requestId/application.properties create mode 100644 liteflow-testcase-springboot/src/test/resources/requestId/flow.xml create mode 100644 liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java create mode 100644 liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java create mode 100644 liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java create mode 100644 liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java create mode 100644 liteflow-testcase-springnative/src/test/resources/requestId/application.xml create mode 100644 liteflow-testcase-springnative/src/test/resources/requestId/flow.xml diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/exception/RequestIdGeneratorException.java b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/RequestIdGeneratorException.java new file mode 100644 index 000000000..632053ccf --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/RequestIdGeneratorException.java @@ -0,0 +1,30 @@ +package com.yomahub.liteflow.exception; + +/** + * RequestIdGenerator 构建异常 + * + * @author tangkc + */ +public class RequestIdGeneratorException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** + * 异常信息 + */ + private String message; + + public RequestIdGeneratorException(String message) { + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/DefaultRequestIdGenerator.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/DefaultRequestIdGenerator.java new file mode 100644 index 000000000..8c6b91183 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/DefaultRequestIdGenerator.java @@ -0,0 +1,17 @@ +package com.yomahub.liteflow.flow.id; + +import cn.hutool.core.util.IdUtil; + +/** + * 默认 Id 生成器 + * + * @author tangkc + */ +public class DefaultRequestIdGenerator implements RequestIdGenerator { + + @Override + public String generate() { + return IdUtil.fastSimpleUUID(); + } + +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/IdGeneratorHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/IdGeneratorHelper.java new file mode 100644 index 000000000..3536100b8 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/IdGeneratorHelper.java @@ -0,0 +1,57 @@ +package com.yomahub.liteflow.flow.id; + +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.exception.RequestIdGeneratorException; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.holder.ContextAwareHolder; + +import java.util.Objects; + +/** + * Id 生成器帮助器 + * + * @author tangkc + */ +public class IdGeneratorHelper { + + private static RequestIdGenerator requestIdGenerator; + + private volatile static IdGeneratorHelper INSTANCE; + + private IdGeneratorHelper() { + + } + + public static IdGeneratorHelper getInstance() { + if (Objects.isNull(INSTANCE)) { + synchronized (IdGeneratorHelper.class) { + if (Objects.isNull(INSTANCE)) { + INSTANCE = new IdGeneratorHelper(); + LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); + String requestIdGeneratorClass = liteflowConfig.getRequestIdGeneratorClass(); + if (StrUtil.isBlank(requestIdGeneratorClass)) { + requestIdGenerator = new DefaultRequestIdGenerator(); + } + try { + Class idGenerateClass = (Class) Class.forName(requestIdGeneratorClass); + requestIdGenerator = ContextAwareHolder.loadContextAware().registerBean(idGenerateClass); + } catch (Exception e) { + throw new RequestIdGeneratorException(e.getMessage()); + } + } + } + } + + return INSTANCE; + } + + public String generate() { + return requestIdGenerator.generate(); + } + + public void clear(){ + INSTANCE = null; + } + +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/RequestIdGenerator.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/RequestIdGenerator.java new file mode 100644 index 000000000..cf8fc8627 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/id/RequestIdGenerator.java @@ -0,0 +1,17 @@ +package com.yomahub.liteflow.flow.id; + +/** + * Id 生成接口 + * + * @author tangkc + */ +public interface RequestIdGenerator { + + /** + * 获取唯一 id + * + * @return 返回唯一 id + */ + String generate(); + +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java index a30e145db..1490ae50d 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfig.java @@ -8,10 +8,8 @@ */ package com.yomahub.liteflow.property; -import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import com.sun.org.apache.xpath.internal.operations.Bool; /** * liteflow的配置实体类 @@ -74,6 +72,9 @@ public class LiteflowConfig { // 节点执行器的类全名 private String nodeExecutorClass; + // requestId 生成器 + private String requestIdGeneratorClass; + //是否打印liteflow banner private Boolean printBanner; @@ -286,6 +287,17 @@ public class LiteflowConfig { this.nodeExecutorClass = nodeExecutorClass; } + public String getRequestIdGeneratorClass() { + if(StrUtil.isBlank(this.requestIdGeneratorClass)){ + return "com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator"; + } + return requestIdGeneratorClass; + } + + public void setRequestIdGeneratorClass(String requestIdGeneratorClass) { + this.requestIdGeneratorClass = requestIdGeneratorClass; + } + public Integer getMainExecutorWorks() { if (ObjectUtil.isNull(mainExecutorWorks)){ return 64; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java index 6e12d6a67..db1805afa 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java @@ -7,20 +7,20 @@ */ package com.yomahub.liteflow.slot; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.yomahub.liteflow.exception.NoSuchContextBeanException; import com.yomahub.liteflow.exception.NullParamException; import com.yomahub.liteflow.flow.entity.CmpStep; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import java.util.Iterator; import java.util.List; import java.util.Queue; import java.util.Stack; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.function.Predicate; /** * Slot的抽象类实现 @@ -223,7 +223,7 @@ public class Slot{ } public void generateRequestId() { - metaDataMap.put(REQUEST_ID, IdUtil.fastSimpleUUID()); + metaDataMap.put(REQUEST_ID, IdGeneratorHelper.getInstance().generate()); } public String getRequestId() { diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java index 5507aa4c5..9fb6cd20b 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowProperty.java @@ -56,9 +56,8 @@ public class LiteflowProperty { // 节点执行器class全名 private String nodeExecutorClass; - - - + // requestId 生成器 + private String requestIdGeneratorClass; //是否打印执行过程中的日志 private boolean printExecutionLog; @@ -190,4 +189,12 @@ public class LiteflowProperty { public void setPrintExecutionLog(boolean printExecutionLog) { this.printExecutionLog = printExecutionLog; } + + public String getRequestIdGeneratorClass() { + return requestIdGeneratorClass; + } + + public void setRequestIdGeneratorClass(String requestIdGeneratorClass) { + this.requestIdGeneratorClass = requestIdGeneratorClass; + } } diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java index 437562c86..eaca85a5f 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowPropertyAutoConfiguration.java @@ -3,7 +3,6 @@ package com.yomahub.liteflow.springboot.config; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.springboot.LiteflowMonitorProperty; import com.yomahub.liteflow.springboot.LiteflowProperty; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -42,6 +41,7 @@ public class LiteflowPropertyAutoConfiguration { liteflowConfig.setZkNode(property.getZkNode()); liteflowConfig.setPrintBanner(property.isPrintBanner()); liteflowConfig.setNodeExecutorClass(property.getNodeExecutorClass()); + liteflowConfig.setRequestIdGeneratorClass(property.getRequestIdGeneratorClass()); liteflowConfig.setMainExecutorWorks(property.getMainExecutorWorks()); liteflowConfig.setMainExecutorClass(property.getMainExecutorClass()); liteflowConfig.setPrintExecutionLog(property.isPrintExecutionLog()); diff --git a/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 4028dcb26..3cdaf349e 100644 --- a/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/liteflow-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1,5 +1,12 @@ { "properties": [ + { + "name": "liteflow.request-id-generator-class", + "type": "java.lang.String", + "description": "Custom requestId builder.", + "sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty", + "defaultValue": "com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator" + }, { "name": "liteflow.rule-source", "type": "java.lang.String", diff --git a/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties b/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties index 558f06029..582418ad2 100644 --- a/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties +++ b/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties @@ -4,6 +4,7 @@ liteflow.zk-node=/lite-flow/flow liteflow.slot-size=1024 liteflow.main-executor-works=64 liteflow.main-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultMainExecutorBuilder +liteflow.request-id-generator-class=com.yomahub.liteflow.flow.id.DefaultRequestIdGenerator liteflow.thread-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultWhenExecutorBuilder liteflow.when-max-wait-seconds=15 liteflow.when-max-workers=16 diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 64886670f..8a86c94eb 100644 --- a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,6 +1,7 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; @@ -16,5 +17,7 @@ public class BaseTest { ExecutorHelper.loadInstance().clearExecutorServiceMap(); SpiFactoryCleaner.clean(); LiteflowConfigGetter.clean(); + IdGeneratorHelper.getInstance().clear(); } + } diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java new file mode 100644 index 000000000..22f73759d --- /dev/null +++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java @@ -0,0 +1,37 @@ +package com.yomahub.liteflow.test.requestId; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * @author tangkc + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/requestId/application.properties") +@SpringBootTest(classes = LiteflowRequestIdSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.requestId.cmp"}) +public class LiteflowRequestIdSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testRequestId() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals(response.getSlot().getRequestId(), "1"); + } + +} diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java new file mode 100644 index 000000000..9cbef6dc0 --- /dev/null +++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("a") +@LiteflowCmpDefine +public class ACmp { + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java new file mode 100644 index 000000000..01495457b --- /dev/null +++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("b") +@LiteflowCmpDefine +public class BCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java new file mode 100644 index 000000000..004459325 --- /dev/null +++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java @@ -0,0 +1,19 @@ +package com.yomahub.liteflow.test.requestId.config; + +import com.yomahub.liteflow.flow.id.RequestIdGenerator; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author tangkc + */ +public class CustomRequestIdGenerator implements RequestIdGenerator { + + private final AtomicInteger atomicInteger = new AtomicInteger(0); + + @Override + public String generate() { + return atomicInteger.incrementAndGet() + ""; + } + +} diff --git a/liteflow-testcase-declare-component/src/test/resources/requestId/application.properties b/liteflow-testcase-declare-component/src/test/resources/requestId/application.properties new file mode 100644 index 000000000..feaedeff1 --- /dev/null +++ b/liteflow-testcase-declare-component/src/test/resources/requestId/application.properties @@ -0,0 +1,2 @@ +liteflow.rule-source=requestId/flow.xml +liteflow.request-id-generator-class=com.yomahub.liteflow.test.requestId.config.CustomRequestIdGenerator \ No newline at end of file diff --git a/liteflow-testcase-declare-component/src/test/resources/requestId/flow.xml b/liteflow-testcase-declare-component/src/test/resources/requestId/flow.xml new file mode 100644 index 000000000..cd988fe71 --- /dev/null +++ b/liteflow-testcase-declare-component/src/test/resources/requestId/flow.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 2dc0c9b8e..5cb09b6d1 100644 --- a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -2,6 +2,7 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.core.FlowExecutorHolder; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner; import com.yomahub.liteflow.thread.ExecutorHelper; @@ -16,5 +17,6 @@ public class BaseTest { SpiFactoryCleaner.clean(); LiteflowConfigGetter.clean(); FlowExecutorHolder.clean(); + IdGeneratorHelper.getInstance().clear(); } } diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java new file mode 100644 index 000000000..f70bf2e66 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.test.requestId; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.core.FlowExecutorHolder; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; +import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tangkc + */ +public class LiteflowRequestIdSpringbootTest extends BaseTest { + + private static FlowExecutor flowExecutor; + + @BeforeClass + public static void init(){ + LiteflowConfig config = new LiteflowConfig(); + config.setRuleSource("requestId/flow.xml"); + config.setRequestIdGeneratorClass("com.yomahub.liteflow.test.requestId.config.CustomRequestIdGenerator"); + flowExecutor = FlowExecutorHolder.loadInstance(config); + } + + @Test + public void testRequestId() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals(response.getSlot().getRequestId(), "1"); + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java new file mode 100644 index 000000000..9d5a4c1b9 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java @@ -0,0 +1,13 @@ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + + +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("AComp executed!"); + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java new file mode 100644 index 000000000..2620d8f2c --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java @@ -0,0 +1,13 @@ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + + +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BComp executed!"); + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java new file mode 100644 index 000000000..fcaa9e84b --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java @@ -0,0 +1,18 @@ +package com.yomahub.liteflow.test.requestId.config; + +import com.yomahub.liteflow.flow.id.RequestIdGenerator; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author tangkc + */ +public class CustomRequestIdGenerator implements RequestIdGenerator { + + private final AtomicInteger atomicInteger = new AtomicInteger(0); + + @Override + public String generate() { + return atomicInteger.incrementAndGet() + ""; + } +} diff --git a/liteflow-testcase-nospring/src/test/resources/requestId/flow.xml b/liteflow-testcase-nospring/src/test/resources/requestId/flow.xml new file mode 100644 index 000000000..d9c9a3d46 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/resources/requestId/flow.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 64886670f..25df2d03c 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,6 +1,7 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; @@ -16,5 +17,6 @@ public class BaseTest { ExecutorHelper.loadInstance().clearExecutorServiceMap(); SpiFactoryCleaner.clean(); LiteflowConfigGetter.clean(); + IdGeneratorHelper.getInstance().clear(); } } diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java new file mode 100644 index 000000000..64363fc4f --- /dev/null +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java @@ -0,0 +1,39 @@ +package com.yomahub.liteflow.test.requestId; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * @author tangkc + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/requestId/application.properties") +@SpringBootTest(classes = LiteflowRequestIdSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.requestId.cmp"}) +public class LiteflowRequestIdSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testRequestId() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals(response.getSlot().getRequestId(), "1"); + } + +} diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java new file mode 100644 index 000000000..9cbef6dc0 --- /dev/null +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("a") +@LiteflowCmpDefine +public class ACmp { + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java new file mode 100644 index 000000000..01495457b --- /dev/null +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("b") +@LiteflowCmpDefine +public class BCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java new file mode 100644 index 000000000..fcaa9e84b --- /dev/null +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java @@ -0,0 +1,18 @@ +package com.yomahub.liteflow.test.requestId.config; + +import com.yomahub.liteflow.flow.id.RequestIdGenerator; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author tangkc + */ +public class CustomRequestIdGenerator implements RequestIdGenerator { + + private final AtomicInteger atomicInteger = new AtomicInteger(0); + + @Override + public String generate() { + return atomicInteger.incrementAndGet() + ""; + } +} diff --git a/liteflow-testcase-springboot/src/test/resources/requestId/application.properties b/liteflow-testcase-springboot/src/test/resources/requestId/application.properties new file mode 100644 index 000000000..feaedeff1 --- /dev/null +++ b/liteflow-testcase-springboot/src/test/resources/requestId/application.properties @@ -0,0 +1,2 @@ +liteflow.rule-source=requestId/flow.xml +liteflow.request-id-generator-class=com.yomahub.liteflow.test.requestId.config.CustomRequestIdGenerator \ No newline at end of file diff --git a/liteflow-testcase-springboot/src/test/resources/requestId/flow.xml b/liteflow-testcase-springboot/src/test/resources/requestId/flow.xml new file mode 100644 index 000000000..cd988fe71 --- /dev/null +++ b/liteflow-testcase-springboot/src/test/resources/requestId/flow.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 64886670f..25df2d03c 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,6 +1,7 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.spi.holder.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; @@ -16,5 +17,6 @@ public class BaseTest { ExecutorHelper.loadInstance().clearExecutorServiceMap(); SpiFactoryCleaner.clean(); LiteflowConfigGetter.clean(); + IdGeneratorHelper.getInstance().clear(); } } diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java new file mode 100644 index 000000000..f48a245a0 --- /dev/null +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdSpringbootTest.java @@ -0,0 +1,35 @@ +package com.yomahub.liteflow.test.requestId; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.flow.id.IdGeneratorHelper; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * @author tangkc + */ +@RunWith(SpringRunner.class) +@ContextConfiguration("classpath:/requestId/application.xml") +@ComponentScan({"com.yomahub.liteflow.test.requestId.cmp"}) +public class LiteflowRequestIdSpringbootTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + @Test + public void testRequestId() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals(response.getSlot().getRequestId(), "1"); + } + +} diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java new file mode 100644 index 000000000..9cbef6dc0 --- /dev/null +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/ACmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * + * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("a") +@LiteflowCmpDefine +public class ACmp { + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java new file mode 100644 index 000000000..01495457b --- /dev/null +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/cmp/BCmp.java @@ -0,0 +1,25 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.requestId.cmp; + +import com.yomahub.liteflow.annotation.LiteflowCmpDefine; +import com.yomahub.liteflow.annotation.LiteflowMethod; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import org.springframework.stereotype.Component; + +@Component("b") +@LiteflowCmpDefine +public class BCmp{ + + @LiteflowMethod(LiteFlowMethodEnum.PROCESS) + public void process(NodeComponent bindCmp) { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java new file mode 100644 index 000000000..fcaa9e84b --- /dev/null +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/requestId/config/CustomRequestIdGenerator.java @@ -0,0 +1,18 @@ +package com.yomahub.liteflow.test.requestId.config; + +import com.yomahub.liteflow.flow.id.RequestIdGenerator; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author tangkc + */ +public class CustomRequestIdGenerator implements RequestIdGenerator { + + private final AtomicInteger atomicInteger = new AtomicInteger(0); + + @Override + public String generate() { + return atomicInteger.incrementAndGet() + ""; + } +} diff --git a/liteflow-testcase-springnative/src/test/resources/requestId/application.xml b/liteflow-testcase-springnative/src/test/resources/requestId/application.xml new file mode 100644 index 000000000..d7428e0b8 --- /dev/null +++ b/liteflow-testcase-springnative/src/test/resources/requestId/application.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-springnative/src/test/resources/requestId/flow.xml b/liteflow-testcase-springnative/src/test/resources/requestId/flow.xml new file mode 100644 index 000000000..cd988fe71 --- /dev/null +++ b/liteflow-testcase-springnative/src/test/resources/requestId/flow.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file