diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 3e4160876..0962338f4 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -35,6 +35,10 @@ import com.yomahub.liteflow.parser.LocalXmlFlowParser; import com.yomahub.liteflow.parser.XmlFlowParser; import com.yomahub.liteflow.parser.ZookeeperXmlFlowParser; +/** + * 流程规则主要执行器类 + * @author Bryan.Zhang + */ public class FlowExecutor { private static final Logger LOG = LoggerFactory.getLogger(FlowExecutor.class); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java index 58c100286..6f2b7dc20 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java @@ -38,7 +38,7 @@ public class Chain implements Executable { static { LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); if (ObjectUtil.isNotNull(liteflowConfig)) { - whenMaxWaitSeconds = liteflowConfig.getWhenMaxWaitSecond(); + whenMaxWaitSeconds = liteflowConfig.getWhenMaxWaitSeconds(); } else { whenMaxWaitSeconds = 15; } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java index 3ca00ba69..048540c82 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java @@ -7,7 +7,7 @@ */ package com.yomahub.liteflow.entity.monitor; -public class CompStatistics { +public class CompStatistics implements Comparable{ private String componentClazzName; @@ -38,4 +38,9 @@ public class CompStatistics { public void setMemorySpent(long memorySpent) { this.memorySpent = memorySpent; } + + @Override + public int compareTo(Object o) { + return -1; + } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java index 278b4d3f2..f4552960c 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java @@ -73,7 +73,7 @@ public class MonitorBus { public void addStatistics(CompStatistics statistics){ if(statisticsMap.containsKey(statistics.getComponentClazzName())){ - statisticsMap.get(statistics.getComponentClazzName()).offer(statistics); + statisticsMap.get(statistics.getComponentClazzName()).add(statistics); }else{ BoundedPriorityQueue queue = new BoundedPriorityQueue<>(queueLimit); queue.offer(statistics); 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 4978c5408..f086c581f 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 @@ -9,18 +9,25 @@ package com.yomahub.liteflow.property; public class LiteflowConfig { + //流程定义资源地址 private String ruleSource; + //slot的数量 private Integer slotSize; - private Integer whenMaxWaitSecond; + //异步线程最大等待秒数 + private Integer whenMaxWaitSeconds; + //是否打印监控log private Boolean enableLog; + //监控存储信息最大队列数量 private Integer queueLimit; + //延迟多少秒打印 private Long delay; + //每隔多少秒打印 private Long period; public String getRuleSource() { @@ -39,12 +46,12 @@ public class LiteflowConfig { this.slotSize = slotSize; } - public Integer getWhenMaxWaitSecond() { - return whenMaxWaitSecond; + public Integer getWhenMaxWaitSeconds() { + return whenMaxWaitSeconds; } - public void setWhenMaxWaitSecond(Integer whenMaxWaitSecond) { - this.whenMaxWaitSecond = whenMaxWaitSecond; + public void setWhenMaxWaitSeconds(Integer whenMaxWaitSeconds) { + this.whenMaxWaitSeconds = whenMaxWaitSeconds; } public Integer getQueueLimit() { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java index a833bb171..9375dcf99 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java @@ -20,6 +20,10 @@ import org.springframework.core.PriorityOrdered; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.util.LOGOPrinter; +/** + * 组件扫描类,只要是NodeComponent的实现类,都可以被这个扫描器扫到 + * @author Bryan.Zhang + */ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { private static final Logger LOG = LoggerFactory.getLogger(ComponentScaner.class); @@ -29,6 +33,7 @@ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { public static ICmpAroundAspect cmpAroundAspect; static { + //打印liteflow的LOGO LOGOPrinter.print(); } @@ -41,7 +46,7 @@ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { Class clazz = bean.getClass(); - //组件的扫描发现 + //组件的扫描发现,扫到之后缓存到类属性map中 if(NodeComponent.class.isAssignableFrom(clazz)){ LOG.info("component[{}] has been found",beanName); NodeComponent nodeComponent = (NodeComponent)bean; diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowComponentScanerAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowComponentScannerAutoConfiguration.java similarity index 72% rename from liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowComponentScanerAutoConfiguration.java rename to liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowComponentScannerAutoConfiguration.java index 592ec9f55..efeb21516 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowComponentScanerAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowComponentScannerAutoConfiguration.java @@ -4,8 +4,12 @@ import com.yomahub.liteflow.spring.ComponentScaner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +/** + * 组件扫描器自动装配类 + * @author Bryan.Zhang + */ @Configuration -public class LiteflowComponentScanerAutoConfiguration { +public class LiteflowComponentScannerAutoConfiguration { @Bean public ComponentScaner componentScaner(){ diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java index 2daae41fe..6099211ce 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowExecutorInit.java @@ -4,6 +4,11 @@ import com.yomahub.liteflow.core.FlowExecutor; import org.springframework.beans.factory.InitializingBean; import javax.annotation.Resource; +/** + * 执行器初始化类 + * 主要用于在启动时执行执行器的初始化方法,避免在运行执行器时第一次初始化而耗费时间 + * @author Bryan.Zhang + */ public class LiteflowExecutorInit implements InitializingBean { private FlowExecutor flowExecutor; diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java index f6a9f28dc..3fe8a8a69 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMainAutoConfiguration.java @@ -21,13 +21,16 @@ import org.springframework.context.annotation.PropertySource; import javax.swing.*; import java.util.List; +/** + * 主要的业务装配器 + * 在这个装配器里装配了执行器,执行器初始化类,监控器 + * 这个装配前置条件是需要LiteflowConfig,LiteflowPropertyAutoConfiguration以及SpringAware + * @author Bryan.Zhang + */ @Configuration @ConditionalOnBean(LiteflowConfig.class) @AutoConfigureAfter(LiteflowPropertyAutoConfiguration.class) @Import(SpringAware.class) -@PropertySource( - name = "Liteflow Default Properties", - value = "classpath:/META-INF/liteflow-default.properties") public class LiteflowMainAutoConfiguration { @Bean diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMonitorProperty.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMonitorProperty.java index 6f4d6f332..6e7119b6d 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMonitorProperty.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowMonitorProperty.java @@ -2,15 +2,23 @@ package com.yomahub.liteflow.springboot; import org.springframework.boot.context.properties.ConfigurationProperties; +/** + * 监控器的基础参数类 + * @author Bryan.Zhang + */ @ConfigurationProperties(prefix = "liteflow.monitor", ignoreUnknownFields = true) public class LiteflowMonitorProperty { + //是否打印监控日志 private boolean enableLog; + //监控队列存储的最大数量 private int queueLimit; + //延迟多少毫秒打印 private long delay; + //每隔多少毫秒打印 private long period; public boolean isEnableLog() { 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 40cdd6e81..0a6ddbc09 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 @@ -2,14 +2,21 @@ package com.yomahub.liteflow.springboot; import org.springframework.boot.context.properties.ConfigurationProperties; +/** + * 执行流程主要的参数类 + * @author Bryan.Zhang + */ @ConfigurationProperties(prefix = "liteflow", ignoreUnknownFields = true) public class LiteflowProperty { + //流程定义资源地址 private String ruleSource; + //slot的数量 private int slotSize; - private int whenMaxWaitSecond; + //异步线程最大等待描述 + private int whenMaxWaitSeconds; public String getRuleSource() { return ruleSource; @@ -27,11 +34,11 @@ public class LiteflowProperty { this.slotSize = slotSize; } - public int getWhenMaxWaitSecond() { - return whenMaxWaitSecond; + public int getWhenMaxWaitSeconds() { + return whenMaxWaitSeconds; } - public void setWhenMaxWaitSecond(int whenMaxWaitSecond) { - this.whenMaxWaitSecond = whenMaxWaitSecond; + public void setWhenMaxWaitSeconds(int whenMaxWaitSeconds) { + this.whenMaxWaitSeconds = whenMaxWaitSeconds; } } diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowPropertyAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowPropertyAutoConfiguration.java index 9cb5dfa84..e43d14842 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowPropertyAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/LiteflowPropertyAutoConfiguration.java @@ -7,6 +7,12 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; +/** + * LiteflowConfig的装配类 + * 这个装配类主要是把监控器的配置参数类和流程配置参数类作一个合并,转换成统一的配置参数类。 + * 同时这里设置了默认的参数路径,如果在springboot的application.properties/yml里没取到的话,就取默认值 + * @author Bryan.Zhang + */ @Configuration @EnableConfigurationProperties({LiteflowProperty.class,LiteflowMonitorProperty.class}) @ConditionalOnProperty(prefix = "liteflow", name = "rule-source") @@ -20,7 +26,7 @@ public class LiteflowPropertyAutoConfiguration { LiteflowConfig liteflowConfig = new LiteflowConfig(); liteflowConfig.setRuleSource(property.getRuleSource()); liteflowConfig.setSlotSize(property.getSlotSize()); - liteflowConfig.setWhenMaxWaitSecond(property.getWhenMaxWaitSecond()); + liteflowConfig.setWhenMaxWaitSeconds(property.getWhenMaxWaitSeconds()); liteflowConfig.setEnableLog(liteflowMonitorProperty.isEnableLog()); liteflowConfig.setQueueLimit(liteflowMonitorProperty.getQueueLimit()); liteflowConfig.setDelay(liteflowMonitorProperty.getDelay()); diff --git a/liteflow-spring-boot-starter/src/main/resources/META-INF/spring.factories b/liteflow-spring-boot-starter/src/main/resources/META-INF/spring.factories index a908cb292..23669427e 100644 --- a/liteflow-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/liteflow-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,5 +1,5 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - com.yomahub.liteflow.springboot.LiteflowComponentScanerAutoConfiguration,\ + com.yomahub.liteflow.springboot.LiteflowComponentScannerAutoConfiguration,\ com.yomahub.liteflow.springboot.LiteflowPropertyAutoConfiguration,\ com.yomahub.liteflow.springboot.LiteflowMainAutoConfiguration diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java index c0e17e845..1bf469168 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java @@ -16,19 +16,6 @@ public class DComponent extends NodeComponent { @Override public void process() { - try { - Slot slot = this.getSlot(); - String e = slot.getOutput("e"); - if(e == null){ - System.out.println(slot); - } - System.out.println("D:" + slot.getOutput("e")); - - String[] temp = new String[1400]; - Thread.sleep(450L); - } catch (InterruptedException e) { - e.printStackTrace(); - } System.out.println("Dcomponent executed!"); } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java index 50392fffa..6a153e5ca 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java @@ -15,6 +15,11 @@ public class GComponent extends NodeComponent { @Override public void process() { + try{ + Thread.sleep(6000); + }catch (Exception e){ + + } System.out.println("Gcomponent executed!"); this.getSlot().setResponseData("i am a response"); } diff --git a/liteflow-test-springboot/src/main/resources/application.properties b/liteflow-test-springboot/src/main/resources/application.properties index e9f5d279b..0649d9746 100644 --- a/liteflow-test-springboot/src/main/resources/application.properties +++ b/liteflow-test-springboot/src/main/resources/application.properties @@ -1,7 +1,7 @@ liteflow.rule-source=config/flow.xml -liteflow.slot-size=2048 -liteflow.when-max-wait-second=20 +#liteflow.slot-size=2048 +liteflow.when-max-wait-seconds=20 liteflow.monitor.enable-log=true liteflow.monitor.queue-limit=300 liteflow.monitor.delay=10000 -liteflow.monitor.period=10000 \ No newline at end of file +#liteflow.monitor.period=10000 \ No newline at end of file diff --git a/liteflow-test-springboot/src/main/resources/config/flow.xml b/liteflow-test-springboot/src/main/resources/config/flow.xml index 69a89be3e..7c9a79b0f 100644 --- a/liteflow-test-springboot/src/main/resources/config/flow.xml +++ b/liteflow-test-springboot/src/main/resources/config/flow.xml @@ -21,6 +21,7 @@ +