这有一个bug
这是我的测试demo的代码
@LiteflowComponent("a") @Slf4j public class ACmp extends NodeComponent { @Override public void process() { log.info("a正在执行"); } }
@LiteflowComponent("b") @Slf4j public class BCmp extends NodeComponent { @Override public void process() { log.info("b正在执行"); } }
@LiteflowComponent("c") @Slf4j public class CCmp extends NodeComponent { @Override public void process() { log.info("c正在执行"); } }
串行执行,或者串行+并行,是没有问题的,比如
<?xml version="1.0" encoding="UTF-8"?> <flow> <nodes> <node id="a" class="org.example.liteFlow.ACmp"/> <node id="b" class="org.example.liteFlow.BCmp"/> <node id="c" class="org.example.liteFlow.CCmp"/> </nodes> <chain name="chain1"> THEN( a, WHEN(b,c) ); </chain> </flow>
如果仅仅是并行执行,就会出现问题。如下
<?xml version="1.0" encoding="UTF-8"?> <flow> <nodes> <node id="a" class="org.example.liteFlow.ACmp"/> <node id="b" class="org.example.liteFlow.BCmp"/> <node id="c" class="org.example.liteFlow.CCmp"/> </nodes> <chain name="chain1"> WHEN(b,c); </chain> </flow>
就会报超时的ERROR
com.yomahub.liteflow.exception.WhenTimeoutException: Timed out when executing the component[b],when-max-timeout-seconds config is:15(s) at com.yomahub.liteflow.flow.parallel.WhenFutureObj.timeOut(WhenFutureObj.java:45) ~[liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.flow.element.condition.WhenCondition.lambda$executeAsyncCondition$2(WhenCondition.java:96) ~[liteflow-core-2.9.7.jar:2.9.7] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_73] at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_73] at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_73] at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) ~[na:1.8.0_73] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_73] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_73] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_73] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_73] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_73] at com.yomahub.liteflow.flow.element.condition.WhenCondition.executeAsyncCondition(WhenCondition.java:100) ~[liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.flow.element.condition.WhenCondition.execute(WhenCondition.java:55) ~[liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.flow.element.Chain.execute(Chain.java:93) ~[liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.core.FlowExecutor.doExecute(FlowExecutor.java:345) [liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.core.FlowExecutor.execute2Resp(FlowExecutor.java:267) [liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.core.FlowExecutor.execute2Resp(FlowExecutor.java:233) [liteflow-core-2.9.7.jar:2.9.7] at com.yomahub.liteflow.core.FlowExecutor.execute2Resp(FlowExecutor.java:223) [liteflow-core-2.9.7.jar:2.9.7] at org.example.liteFlow.LiteFlowTest.test(LiteFlowTest.java:18) [classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73] at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:415) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1791) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) [spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1247) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1236) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE] at org.example.TestApplication.main(TestApplication.java:11) ~[classes/:na] 2023-02-19 22:59:27.728 INFO 1944 --- [ main] com.yomahub.liteflow.slot.Slot : [fba792cc914241a7a6a7645e9c6cb518]:CHAIN_NAME[chain1] 2023-02-19 22:59:27.728 INFO 1944 --- [ main] com.yomahub.liteflow.slot.DataBus : [fba792cc914241a7a6a7645e9c6cb518]:slot[0] released 2023-02-19 22:59:27.729 ERROR 1944 --- [lf-when-thead-0] com.yomahub.liteflow.flow.element.Node : [fba792cc914241a7a6a7645e9c6cb518]:component[b] cause error,error:null 2023-02-19 22:59:27.729 ERROR 1944 --- [lf-when-thead-1] com.yomahub.liteflow.flow.element.Node : [fba792cc914241a7a6a7645e9c6cb518]:component[c] cause error,error:null 2023-02-19 22:59:27.856 INFO 1944 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2023-02-19 22:59:27.942 INFO 1944 --- [ main] com.yomahub.liteflow.core.FlowExecutor : flow info loaded from local file,path=config/flow.el.xml 2023-02-19 22:59:28.419 INFO 1944 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator' 2023-02-19 22:59:28.456 INFO 1944 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8001 (http) with context path '' 2023-02-19 22:59:28.465 INFO 1944 --- [ main] org.example.TestApplication : Started TestApplication in 17.496 seconds (JVM running for 18.017)
版本是JDK 1.8 ,项目基于Spring boot2.3.12.RELEASE ,liteflow版本是2.9.7
在dev分支上有相应的测试用例:com.yomahub.liteflow.test.asyncNode.AsyncNodeELSpringbootTest#testAsyncFlow3
你说的这种没问题的。如果你还是觉得有问题,请提pr给相应的测试用例,或者给出可以运行的测试用例地址