From 0a1671b5abc7b57ceb6fd10f6d3fc8c77fc0fc21 Mon Sep 17 00:00:00 2001 From: mll Date: Tue, 20 Sep 2022 09:11:58 +0800 Subject: [PATCH] =?UTF-8?q?nacos=20rule=201.=E8=B0=83=E6=95=B4=E5=A1=AB?= =?UTF-8?q?=E5=85=85=E5=88=9D=E5=A7=8B=E5=8C=96=E6=95=B0=E6=8D=AE=202.?= =?UTF-8?q?=E8=B0=83=E6=95=B4listener=203.=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../parser/nacos/NacosXmlELParser.java | 20 ++++----- .../parser/nacos/util/NacosParserHelper.java | 24 +++------- liteflow-rule-plugin/pom.xml | 1 + .../pom.xml | 10 ----- .../nacos/NacosWithXmlELSpringbootTest.java | 44 ++++++++++++++++--- .../nacos/application-xml.properties | 7 +-- liteflow-testcase-el/pom.xml | 1 + 7 files changed, 59 insertions(+), 48 deletions(-) diff --git a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java index 1b36f25dd..4dccc301c 100644 --- a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java +++ b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java @@ -21,13 +21,6 @@ public class NacosXmlELParser extends ClassXmlFlowELParser { private final NacosParserHelper helper; public NacosXmlELParser() { - Consumer parseConsumer = t -> { - try { - parse(t); - } catch (Exception e) { - throw new RuntimeException(e); - } - }; LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); if (StrUtil.isBlank(liteflowConfig.getRuleSourceExtData())){ @@ -44,7 +37,7 @@ public class NacosXmlELParser extends ClassXmlFlowELParser { nacosParserVO.setNamespace(""); } if (StrUtil.isBlank(nacosParserVO.getDataId())){ - nacosParserVO.setDataId("LiteFLow"); + nacosParserVO.setDataId("LiteFlow"); } if (StrUtil.isBlank(nacosParserVO.getGroup())){ nacosParserVO.setGroup("LITE_FLOW_GROUP"); @@ -55,7 +48,7 @@ public class NacosXmlELParser extends ClassXmlFlowELParser { if (StrUtil.isBlank(nacosParserVO.getPassword())){ nacosParserVO.setPassword(""); } - helper = new NacosParserHelper(nacosParserVO, parseConsumer); + helper = new NacosParserHelper(nacosParserVO); }catch (Exception e){ throw new NacosException(e.getMessage()); } @@ -63,10 +56,17 @@ public class NacosXmlELParser extends ClassXmlFlowELParser { @Override public String parseCustom() { + Consumer parseConsumer = t -> { + try { + parse(t); + } catch (Exception e) { + throw new RuntimeException(e); + } + }; try{ String content = helper.getContent(); helper.checkContent(content); - helper.listener(); + helper.listener(parseConsumer); return content; }catch (Exception e){ throw new NacosException(e.getMessage()); diff --git a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java index 3da1102ea..2c7f4642e 100644 --- a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java +++ b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java @@ -1,10 +1,9 @@ package com.yomahub.liteflow.parser.nacos.util; import cn.hutool.core.util.StrUtil; -import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.PropertyKeyConst; -import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; +import com.alibaba.nacos.client.config.NacosConfigService; import com.yomahub.liteflow.exception.ParseException; import com.yomahub.liteflow.parser.nacos.exception.NacosException; import com.yomahub.liteflow.parser.nacos.vo.NacosParserVO; @@ -13,7 +12,6 @@ import org.slf4j.LoggerFactory; import java.text.MessageFormat; import java.util.Properties; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.function.Consumer; @@ -27,27 +25,18 @@ public class NacosParserHelper { private static final Logger LOG = LoggerFactory.getLogger(NacosParserHelper.class); private final NacosParserVO nacosParserVO; - private final Consumer parseConsumer; - private static final ConcurrentHashMap CONFIG_MAP = new ConcurrentHashMap<>(1); + private final NacosConfigService configService; - private final ConfigService configService; - - static { - CONFIG_MAP.put("Content",""); - } - - public NacosParserHelper(NacosParserVO nacosParserVO, Consumer parseConsumer) { + public NacosParserHelper(NacosParserVO nacosParserVO) { this.nacosParserVO = nacosParserVO; - this.parseConsumer = parseConsumer; try{ Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, nacosParserVO.getServerAddr()); properties.put(PropertyKeyConst.NAMESPACE,nacosParserVO.getNamespace()); properties.put(PropertyKeyConst.USERNAME,nacosParserVO.getUsername()); properties.put(PropertyKeyConst.PASSWORD,nacosParserVO.getPassword()); - this.configService = NacosFactory.createConfigService(properties); - CONFIG_MAP.put("Content",configService.getConfig(nacosParserVO.getDataId(), nacosParserVO.getGroup(), 3000L)); + this.configService = new NacosConfigService(properties); }catch (Exception e){ throw new NacosException(e.getMessage()); } @@ -55,7 +44,7 @@ public class NacosParserHelper { public String getContent(){ try{ - return CONFIG_MAP.get("Content"); + return configService.getConfig(nacosParserVO.getDataId(), nacosParserVO.getGroup(), 3000L); }catch (Exception e){ throw new NacosException(e.getMessage()); } @@ -74,13 +63,12 @@ public class NacosParserHelper { /** * 监听 nacos 数据变化 */ - public void listener() { + public void listener(Consumer parseConsumer) { try { this.configService.addListener(nacosParserVO.getDataId(), nacosParserVO.getGroup(), new Listener() { @Override public void receiveConfigInfo(String configInfo) { LOG.info("stating load flow config.... {} " , configInfo); - CONFIG_MAP.put("Content",configInfo); parseConsumer.accept(configInfo); } @Override diff --git a/liteflow-rule-plugin/pom.xml b/liteflow-rule-plugin/pom.xml index 9599dbec3..5d79b8b3c 100644 --- a/liteflow-rule-plugin/pom.xml +++ b/liteflow-rule-plugin/pom.xml @@ -13,6 +13,7 @@ liteflow-rule-zk liteflow-rule-sql + liteflow-rule-nacos liteflow-rule-plugin diff --git a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/pom.xml b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/pom.xml index 7cae8c461..00c8b0ac3 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/pom.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/pom.xml @@ -23,16 +23,6 @@ org.springframework.boot spring-boot-starter-test - - org.aspectj - aspectjweaver - test - - - org.apache.curator - curator-test - test - com.yomahub diff --git a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java index 0407f2de9..1d15c1abb 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/nacos/NacosWithXmlELSpringbootTest.java @@ -1,8 +1,14 @@ package com.yomahub.liteflow.test.nacos; +import com.alibaba.nacos.client.config.impl.LocalConfigInfoProcessor; import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.enums.FlowParserTypeEnum; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.parser.nacos.util.NacosParserHelper; +import com.yomahub.liteflow.parser.nacos.vo.NacosParserVO; import com.yomahub.liteflow.test.BaseTest; +import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,15 +36,39 @@ public class NacosWithXmlELSpringbootTest extends BaseTest { @Resource private FlowExecutor flowExecutor; + private NacosParserHelper helper; + + // 写到本地. + final String flowXml = "THEN(a, b, c);"; + + // 2次写入本地 + final String changedFlowXml = "THEN(a, c);"; + + private static NacosParserVO nacosParserVO = new NacosParserVO(); + + static { + // 这里的信息必须 = application-xml.properties liteflow.rule-source-ext-data + nacosParserVO.setServerAddr("127.0.0.1:8848"); + nacosParserVO.setDataId("LiteFlow"); + nacosParserVO.setGroup("LITE_FLOW_GROUP"); + nacosParserVO.setNamespace(""); + } + + @After + public void clean() { + LocalConfigInfoProcessor.cleanAllSnapshot(); + } + @Test public void testNacosWithXml() throws Exception { + // envName 把数据写到本地,作为快照数据.始终会取到 + String envName = "fixed-127.0.0.1_8848"; + LocalConfigInfoProcessor.saveSnapshot(envName,nacosParserVO.getDataId(),nacosParserVO.getGroup(),nacosParserVO.getNamespace(),flowXml); LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); - Assert.assertTrue(response.isSuccess()); - System.out.println(" start " + response.getExecuteStepStr()); - for (int i = 0 ; i < 10; i ++){ - Thread.sleep(10000L); - response = flowExecutor.execute2Resp("chain1", "arg"); - System.out.println(" i " + i + response.getExecuteStepStr()); - } + Assert.assertEquals("a==>b==>c", response.getExecuteStepStrWithoutTime()); + + FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_EL_XML,changedFlowXml); + response = flowExecutor.execute2Resp("chain1", "arg"); + Assert.assertEquals("a==>c", response.getExecuteStepStrWithoutTime()); } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/resources/nacos/application-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/resources/nacos/application-xml.properties index 8d3ba6bf5..d87229360 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/resources/nacos/application-xml.properties +++ b/liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/resources/nacos/application-xml.properties @@ -1,3 +1,4 @@ -liteflow.rule-source-ext-data={"serverAddr":"192.168.10.147:8848","dataId":"LiteFlow","group":"LITE_FLOW_GROUP"} -#liteflow.rule-source-ext-data={"serverAddr":"192.168.10.147:8848","dataId":"LiteFlow","group":"LITE_FLOW_GROUP"} -#liteflow.rule-source-ext-data={"serverAddr":"192.168.10.147:8848","dataId":"LiteFlow","group":"LITE_FLOW_GROUP","namespace":"","username":"","password":""} \ No newline at end of file +liteflow.rule-source-ext-data={"serverAddr":"127.0.0.1:8848"} +#liteflow.rule-source-ext-data={"serverAddr":"127.0.0.1:8848","dataId":"LiteFlow","group":"LITE_FLOW_GROUP"} +#liteflow.rule-source-ext-data={"serverAddr":"192.168.10.147:8848","dataId":"LiteFlow","group":"LITE_FLOW_GROUP","namespace":"","username":"","password":""} +liteflow.parse-on-start=false \ No newline at end of file diff --git a/liteflow-testcase-el/pom.xml b/liteflow-testcase-el/pom.xml index c31339763..aa71e4af0 100644 --- a/liteflow-testcase-el/pom.xml +++ b/liteflow-testcase-el/pom.xml @@ -24,5 +24,6 @@ liteflow-testcase-el-script-qlexpress-springboot liteflow-testcase-el-zk-springboot liteflow-testcase-el-sql-springboot + liteflow-testcase-el-nacos-springboot \ No newline at end of file