diff --git a/liteflow-test-springboot/pom.xml b/liteflow-test-springboot/pom.xml new file mode 100644 index 00000000..2a650880 --- /dev/null +++ b/liteflow-test-springboot/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + liteflow + com.thebeastshop + 2.2.0-SNAPSHOT + + com.thebeastshop + liteflow-test-springboot + 1.0.0 + Demo project for Spring Boot + + + 1.8 + + + + + + + org.springframework.boot + spring-boot-dependencies + 2.0.5.RELEASE + pom + import + + + + + + + org.springframework.boot + spring-boot-starter + + + + com.thebeastshop + liteflow-spring-boot-starter + ${project.parent.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + true + + + + maven-deploy-plugin + + true + + + + + + diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/FlowtestApplication.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/FlowtestApplication.java new file mode 100644 index 00000000..e2d0755a --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/FlowtestApplication.java @@ -0,0 +1,16 @@ +package com.thebeastshop.flowtest; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class FlowtestApplication { + + public static void main(String[] args) { + try{ + SpringApplication.run(FlowtestApplication.class, args); + }catch (Throwable t){ + t.printStackTrace(); + } + } +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/TestFlow.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/TestFlow.java new file mode 100644 index 00000000..92e28ea3 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/TestFlow.java @@ -0,0 +1,21 @@ +package com.thebeastshop.flowtest; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.entity.data.Slot; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class TestFlow implements CommandLineRunner { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void run(String... args) throws Exception { + Slot slot = flowExecutor.execute("chain3", "it's a request"); + System.out.println(slot); + } +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/AComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/AComponent.java new file mode 100644 index 00000000..1f04db03 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/AComponent.java @@ -0,0 +1,27 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("a") +public class AComponent extends NodeComponent { + + @Override + public void process() { + String str = this.getSlot().getRequestData(); + System.out.println(str); + System.out.println("Acomponent executed!"); + + this.getSlot().setOutput(this.getNodeId(), "A component output"); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/BComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/BComponent.java new file mode 100644 index 00000000..8b70dba6 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/BComponent.java @@ -0,0 +1,30 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("b") +public class BComponent extends NodeComponent { + + @Override + public void process() { + try { + Thread.sleep(400L); + String[] temp = new String[1000]; + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("Bcomponent executed!"); + + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CComponent.java new file mode 100644 index 00000000..0d52e06b --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CComponent.java @@ -0,0 +1,30 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("c") +public class CComponent extends NodeComponent { + + @Override + public void process() { + try { + String[] temp = new String[4000]; + Thread.sleep(300L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("Ccomponent executed!"); + + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CondComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CondComponent.java new file mode 100644 index 00000000..d7819b32 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/CondComponent.java @@ -0,0 +1,22 @@ +/** + *

Title: litis

+ *

Description: redis的全方位开发运维平台

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email 47483522@qq.com + * @Date 2017-11-28 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.core.NodeCondComponent; +import org.springframework.stereotype.Component; + +@Component("cond") +public class CondComponent extends NodeCondComponent { + + @Override + protected Class processCond() throws Exception { + return BComponent.class; + } +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/DComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/DComponent.java new file mode 100644 index 00000000..13e131a0 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/DComponent.java @@ -0,0 +1,38 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.entity.data.Slot; +import org.springframework.stereotype.Component; + +@Component("d") +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/thebeastshop/flowtest/components/EComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/EComponent.java new file mode 100644 index 00000000..c56f0c69 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/EComponent.java @@ -0,0 +1,31 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("e") +public class EComponent extends NodeComponent { + + @Override + public void process() { + try { + Thread.sleep(120L); + System.out.println("E:" + this.getSlot().getOutput("a")); + this.getSlot().setOutput(this.getNodeId(), "E component output"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("Eomponent executed!"); + + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/FComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/FComponent.java new file mode 100644 index 00000000..68af66e6 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/FComponent.java @@ -0,0 +1,30 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("f") +public class FComponent extends NodeComponent { + + @Override + public void process() { + try { + String[] temp = new String[400]; + Thread.sleep(40L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("Fcomponent executed!"); + + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/GComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/GComponent.java new file mode 100644 index 00000000..044a2c07 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/GComponent.java @@ -0,0 +1,24 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("g") +public class GComponent extends NodeComponent { + + @Override + public void process() { + System.out.println("Gcomponent executed!"); + this.getSlot().setResponseData("i am a response"); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/HComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/HComponent.java new file mode 100644 index 00000000..5db50e91 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/HComponent.java @@ -0,0 +1,34 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.entity.data.DefaultSlot; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("h") +public class HComponent extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("Hcomponent executed!"); + try{ + flowExecutor.invoke("strategy1",3, DefaultSlot.class, this.getSlotIndex()); + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M1Component.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M1Component.java new file mode 100644 index 00000000..c48ff1a7 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M1Component.java @@ -0,0 +1,29 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("m1") +public class M1Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("m1 component executed!"); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M2Component.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M2Component.java new file mode 100644 index 00000000..5e9f491c --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M2Component.java @@ -0,0 +1,29 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("m2") +public class M2Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("m2 component executed!"); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M3Component.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M3Component.java new file mode 100644 index 00000000..a742fe0f --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/M3Component.java @@ -0,0 +1,34 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.entity.data.DefaultSlot; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("m3") +public class M3Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("m3 component executed!"); + try{ + flowExecutor.invoke("strategy2",10, DefaultSlot.class, this.getSlotIndex()); + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/MComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/MComponent.java new file mode 100644 index 00000000..1e85233e --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/MComponent.java @@ -0,0 +1,39 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.core.NodeCondComponent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("m") +public class MComponent extends NodeCondComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + protected Class processCond() throws Exception { + System.out.println("m conponent executed"); + Integer flag = this.getSlot().getChainReqData("strategy1"); + if(flag == 1) { + return M1Component.class; + }else if(flag == 2){ + return M2Component.class; + }else { + return M3Component.class; + } + + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P1Component.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P1Component.java new file mode 100644 index 00000000..c244fc1d --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P1Component.java @@ -0,0 +1,29 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("p1") +public class P1Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("p1 component executed!"); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P2Component.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P2Component.java new file mode 100644 index 00000000..13c17bcc --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/P2Component.java @@ -0,0 +1,29 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("p2") +public class P2Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("p2 component executed!"); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/PComponent.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/PComponent.java new file mode 100644 index 00000000..565f0c55 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/components/PComponent.java @@ -0,0 +1,37 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.flowtest.components; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.core.NodeCondComponent; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component("p") +public class PComponent extends NodeCondComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + protected Class processCond() throws Exception { + System.out.println("p conponent executed"); + Integer flag = this.getSlot().getChainReqData("strategy2"); + if(flag == 10) { + return P1Component.class; + }else { + return P2Component.class; + } + + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest.java new file mode 100644 index 00000000..9804a5d7 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest.java @@ -0,0 +1,131 @@ +package com.thebeastshop.flowtest.curator; + +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.framework.recipes.cache.*; +import org.apache.curator.retry.RetryNTimes; + +public class CuratorTest { + + /** Zookeeper info */ + private static final String ZK_ADDRESS = "123.206.92.144:2181,123.206.92.144:2182,123.206.92.144:2183"; + private static final String ZK_PATH = "/zktest/a1/aa1"; + + public static void main(String[] args) throws Exception { + // 1.Connect to zk + CuratorFramework client = CuratorFrameworkFactory.newClient( + ZK_ADDRESS, + new RetryNTimes(10, 5000) + ); + client.start(); + + checkNode(client); + +// childNodeListen(client); + +// removeNodeData(client); + +// createNode(client); + +// nodeListen(client); +// +// modifyNodeData(client); + + System.in.read(); + +// getNodeData(client); +// +// + + } + + private static void checkNode(CuratorFramework client) throws Exception { + System.out.println(client.checkExists().forPath("/test")); + } + + private static void createNode(CuratorFramework client) throws Exception { + String data1 = "nice to meet you"; + print("create", ZK_PATH, data1); + client.create(). + creatingParentsIfNeeded(). + forPath(ZK_PATH, data1.getBytes()); + } + + private static void getNodeData(CuratorFramework client) throws Exception { + print("ls", "/"); + print(client.getChildren().forPath("/")); + print("get", ZK_PATH); + print(client.getData().forPath(ZK_PATH)); + } + + private static void modifyNodeData(CuratorFramework client) throws Exception { + String data2 = "world for u"; + print("set", ZK_PATH, data2); + client.setData().forPath(ZK_PATH, data2.getBytes()); + print("get", ZK_PATH); + print(client.getData().forPath(ZK_PATH)); + } + + private static void removeNodeData(CuratorFramework client) throws Exception { + print("delete", "/zktest/dddd"); + client.delete().forPath("/zktest/dddd"); + print("ls", "/"); + print(client.getChildren().forPath("/")); + } + + private static void nodeListen(CuratorFramework client) throws Exception { + final NodeCache cache = new NodeCache(client,ZK_PATH); + cache.start(); + + cache.getListenable().addListener(new NodeCacheListener() { + + @Override + public void nodeChanged() throws Exception { + byte[] res = cache.getCurrentData().getData(); + System.out.println("data: " + new String(res)); + } + }); + } + + private static void childNodeListen(CuratorFramework client) throws Exception { + final PathChildrenCache cache = new PathChildrenCache(client,"/zktest",true); + cache.start(); + + cache.getListenable().addListener(new PathChildrenCacheListener() { + + @Override + public void childEvent(CuratorFramework curator, PathChildrenCacheEvent event) throws Exception { + switch (event.getType()) { + case CHILD_ADDED: + System.out.println("add:" + event.getData().getPath() + ":" + new String(event.getData().getData())); + break; + case CHILD_UPDATED: + System.out.println("update:" + event.getData().getPath() + ":" + new String(event.getData().getData())); + break; + case CHILD_REMOVED: + System.out.println("remove:" + event.getData().getPath() + ":" + new String(event.getData().getData())); + break; + default: + break; + } + } + }); + } + + + private static void print(String... cmds) { + StringBuilder text = new StringBuilder("$ "); + for (String cmd : cmds) { + text.append(cmd).append(" "); + } + System.out.println(text.toString()); + } + + private static void print(Object result) { + System.out.println( + result instanceof byte[] + ? new String((byte[]) result) + : result); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest2.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest2.java new file mode 100644 index 00000000..cb3c2a9a --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/curator/CuratorTest2.java @@ -0,0 +1,117 @@ +package com.thebeastshop.flowtest.curator; + +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.framework.recipes.cache.*; +import org.apache.curator.retry.RetryNTimes; + +public class CuratorTest2 { + + /** Zookeeper info */ + private static final String ZK_ADDRESS = "114.55.174.189:2181"; + private static final String ZK_PATH = "/zktest/ffff"; + + public static void main(String[] args) throws Exception { + // 1.Connect to zk + CuratorFramework client = CuratorFrameworkFactory.newClient( + ZK_ADDRESS, + new RetryNTimes(10, 5000) + ); + client.start(); + +// removeNodeData(client); + +// createNode(client); + +// nodeListen(client); +// + modifyNodeData(client); + + } + + private static void createNode(CuratorFramework client) throws Exception { + String data1 = "hello"; + print("create", ZK_PATH, data1); + client.create(). + creatingParentsIfNeeded(). + forPath(ZK_PATH, data1.getBytes()); + } + + private static void getNodeData(CuratorFramework client) throws Exception { + print("ls", "/"); + print(client.getChildren().forPath("/")); + print("get", ZK_PATH); + print(client.getData().forPath(ZK_PATH)); + } + + private static void modifyNodeData(CuratorFramework client) throws Exception { + String data2 = "world for u"; + print("set", ZK_PATH, data2); + client.setData().forPath(ZK_PATH, data2.getBytes()); + print("get", ZK_PATH); + print(client.getData().forPath(ZK_PATH)); + } + + private static void removeNodeData(CuratorFramework client) throws Exception { + print("delete", "/zktest/dddd"); + client.delete().forPath("/zktest/dddd"); + print("ls", "/"); + print(client.getChildren().forPath("/")); + } + + private static void nodeListen(CuratorFramework client) throws Exception { + final NodeCache cache = new NodeCache(client,ZK_PATH); + cache.start(); + + cache.getListenable().addListener(new NodeCacheListener() { + + @Override + public void nodeChanged() throws Exception { + byte[] res = cache.getCurrentData().getData(); + System.out.println("data: " + new String(res)); + } + }); + } + + private static void childNodeListen(CuratorFramework client) throws Exception { + final PathChildrenCache cache = new PathChildrenCache(client,"/zktest",true); + cache.start(); + + cache.getListenable().addListener(new PathChildrenCacheListener() { + + @Override + public void childEvent(CuratorFramework curator, PathChildrenCacheEvent event) throws Exception { + switch (event.getType()) { + case CHILD_ADDED: + System.out.println("add:" + event.getData().getPath() + ":" + new String(event.getData().getData())); + break; + case CHILD_UPDATED: + System.out.println("update:" + event.getData().getPath() + ":" + new String(event.getData().getData())); + break; + case CHILD_REMOVED: + System.out.println("remove:" + event.getData().getPath() + ":" + new String(event.getData().getData())); + break; + default: + break; + } + } + }); + } + + + private static void print(String... cmds) { + StringBuilder text = new StringBuilder("$ "); + for (String cmd : cmds) { + text.append(cmd).append(" "); + } + System.out.println(text.toString()); + } + + private static void print(Object result) { + System.out.println( + result instanceof byte[] + ? new String((byte[]) result) + : result); + } + +} diff --git a/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/regex/RegexTest.java b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/regex/RegexTest.java new file mode 100644 index 00000000..5d1ab825 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/thebeastshop/flowtest/regex/RegexTest.java @@ -0,0 +1,23 @@ +package com.thebeastshop.flowtest.regex; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class RegexTest { + + public static void main(String[] args) { + String str = "192.168.1.1:2181,192.168.1.2:2182,192.168.1.3:2183"; + List list = new ArrayList(); + Pattern p = Pattern.compile("[\\w\\d][\\w\\d\\.]+\\:(\\d)+(\\,[\\w\\d][\\w\\d\\.]+\\:(\\d)+)*"); + Matcher m = p.matcher(str); + while(m.find()){ + list.add(m.group()); + } + System.out.println(list.size()); + System.out.println(list); + + } + +} diff --git a/liteflow-test-springboot/src/main/resources/application.properties b/liteflow-test-springboot/src/main/resources/application.properties new file mode 100644 index 00000000..5638b647 --- /dev/null +++ b/liteflow-test-springboot/src/main/resources/application.properties @@ -0,0 +1 @@ +liteflow.ruleSource=config/flow.xml diff --git a/liteflow-test-springboot/src/main/resources/application.xml b/liteflow-test-springboot/src/main/resources/application.xml new file mode 100644 index 00000000..e69de29b diff --git a/liteflow-test-springboot/src/main/resources/config/flow.xml b/liteflow-test-springboot/src/main/resources/config/flow.xml new file mode 100644 index 00000000..e072affa --- /dev/null +++ b/liteflow-test-springboot/src/main/resources/config/flow.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/liteflow-test-springboot/src/test/java/com/thebeastshop/flowtest/FlowtestApplicationTests.java b/liteflow-test-springboot/src/test/java/com/thebeastshop/flowtest/FlowtestApplicationTests.java new file mode 100644 index 00000000..97c0a42f --- /dev/null +++ b/liteflow-test-springboot/src/test/java/com/thebeastshop/flowtest/FlowtestApplicationTests.java @@ -0,0 +1,16 @@ +package com.thebeastshop.flowtest; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class FlowtestApplicationTests { + + @Test + public void contextLoads() { + } + +}