前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LiteFlow 引擎框架

LiteFlow 引擎框架

原创
作者头像
花落花相惜
发布2021-12-15 14:39:00
2.5K0
发布2021-12-15 14:39:00
举报
文章被收录于专栏:花落的技术专栏

初级开发

代码语言:txt
复制
      if ("618".equals(day)){
代码语言:txt
复制
            System.out.println("668");
代码语言:txt
复制
        }else if ("11.11".equals(day)){
代码语言:txt
复制
            System.out.println("888");
代码语言:txt
复制
        }else if ("12.12".equals(day)){
代码语言:txt
复制
            System.out.println("180");
代码语言:txt
复制
        }else{
代码语言:txt
复制
            System.out.println("998");
代码语言:txt
复制
        }

中级开发

代码语言:txt
复制
public interface NodeComponent {
代码语言:txt
复制
  void  process() ;
代码语言:txt
复制
}
代码语言:txt
复制
@Component
代码语言:txt
复制
public class AComponent extends NodeComponent {
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void process() {
代码语言:txt
复制
        /**
代码语言:txt
复制
         * 这里逻辑省略
         * 
         */
        System.out.println("618");
    }
}
@Component
public class BComponent extends NodeComponent {
    @Override
    public void process() {
        /**
         * 这里逻辑省略
         * 
         */
        System.out.println("11.11");
    }
}
//下面省略12.12
代码语言:txt
复制
//主流程
代码语言:txt
复制
@Component
代码语言:txt
复制
public class TestFlow {
代码语言:txt
复制
    @Resource
代码语言:txt
复制
    private Map<String, NodeComponent> map;
代码语言:txt
复制
    public void run(String name) throws Exception {
代码语言:txt
复制
        for (Map.Entry<String, NodeComponent> entry : map.entrySet()) {
代码语言:txt
复制
            String key = entry.getKey();
代码语言:txt
复制
            if (StringUtils.equals(name,key)){
代码语言:txt
复制
                entry.getValue().process();
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
}

LiteFlow简介

LiteFlow就是为解耦复杂逻辑而生,如果你要对复杂业务逻辑进行新写或者重构,用liteflow最合适不过。它是一个轻量,快速的组件式流程引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件,并支持热加载规则配置,实现即时修改。

使用Liteflow,你需要去把复杂的业务逻辑按代码片段拆分成一个个小组件,并定义一个规则流程配置。这样,所有的组件,就能按照你的规则配置去进行复杂的流转。

优点:

  • 编排利器
  • 规则轻量
  • 优雅稳定
  • 扩展灵活

特性:

  • 复杂业务的解耦利器,为所有组件提供统一的实现协议
  • 基于规则文件来编排流程,并可进行热编排
  • 框架中支持zookeeper流程配置,即时推送修改内容
  • 能自由扩展配置持久化源,提供扩展接口
  • 支持springboot的自动装配,也支持spring的配置和非spring的项目
  • 提供串行和并行2种模式,提供常见常见的表达式语句
  • 提供无级嵌套子流程模式
  • 数据槽高并发隔离机制
  • 自带简单的监控,能够知道每个组件的运行耗时排行

架构设计

image.png

Liteflow适用于哪些场景

Liteflow适用于拥有复杂逻辑的业务,比如说价格引擎,下单流程,规则校验等,这些业务往往都拥有很多步骤,这些步骤完全可以按照业务粒度拆分成一个个独立的组件,进行装配复用变更。使用Liteflow,你会得到一个灵活度高,扩展性很强的系统。因为组件之间相互独立,也也可以避免改一处而动全身的这样的风险。

Liteflow的Gitee仓库:https://gitee.com/dromara/liteFlow

Liteflow的Github仓库:https://github.com/dromara/liteflow

使用文档地址

springboot中集成liteflow

  • 引入依赖
代码语言:txt
复制
     <dependency>
代码语言:txt
复制
          <groupId>com.yomahub</groupId>
代码语言:txt
复制
            <artifactId>liteflow-spring-boot-starter</artifactId>
代码语言:txt
复制
            <version>${project.parent.version}</version>
代码语言:txt
复制
        </dependency>
  • 编写流程节点
代码语言:txt
复制
@Component("a")
代码语言:txt
复制
public class AComponent extends NodeComponent {
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void process() {
代码语言:txt
复制
        String str = this.getSlot().getRequestData();
代码语言:txt
复制
        System.out.println(str);
代码语言:txt
复制
        System.out.println("Acomponent executed!");
代码语言:txt
复制
        this.getSlot().setOutput(this.getNodeId(), "A component output");
代码语言:txt
复制
    }
代码语言:txt
复制
}
代码语言:txt
复制
@Component("b")
代码语言:txt
复制
public class BComponent extends NodeComponent {
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void process() {
代码语言:txt
复制
        try {
代码语言:txt
复制
            Thread.sleep(400L);
代码语言:txt
复制
            String[] temp = new String[1000];
代码语言:txt
复制
        } catch (InterruptedException e) {
代码语言:txt
复制
            e.printStackTrace();
代码语言:txt
复制
        }
代码语言:txt
复制
        System.out.println("Bcomponent executed!");
代码语言:txt
复制
    }
代码语言:txt
复制
}
  • 流程测试
代码语言:txt
复制
@Component
代码语言:txt
复制
public class TestFlow{
代码语言:txt
复制
    @Resource
代码语言:txt
复制
    private FlowExecutor flowExecutor;
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void run(String... args) throws Exception {
代码语言:txt
复制
        Slot slot = flowExecutor.execute("chain3", "it's a request");
代码语言:txt
复制
        System.out.println(slot);
代码语言:txt
复制
    }
代码语言:txt
复制
}
  • 创建flow.xml文件 src/main/resources/config/flow.xml

image.png

代码语言:txt
复制
<?xml version="1.0" encoding="UTF-8"?>
代码语言:txt
复制
<flow>
代码语言:txt
复制
    <chain name="chain1">
代码语言:txt
复制
        <then value="a,cond(b|d)"/> <!-- cond是条件节点,根据cond里的逻辑决定路由到b节点还是d节点,可以配置多个 -->
代码语言:txt
复制
        <then value="e,f,g"/>
代码语言:txt
复制
    </chain>
代码语言:txt
复制
    <chain name="chain2">
代码语言:txt
复制
        <then value="a,c"/> <!-- then表示串行 -->
代码语言:txt
复制
        <when value="b,d"/> <!-- when表示串行 -->
代码语言:txt
复制
        <then value="e,f,g"/>
代码语言:txt
复制
    </chain>
代码语言:txt
复制
</flow>
  • application.properties
代码语言:txt
复制
liteflow.rule-source=config/flow.xml
代码语言:txt
复制
#------以下非必须-------
代码语言:txt
复制
#slot的数量,默认值为1024
代码语言:txt
复制
liteflow.slot-size=2048
代码语言:txt
复制
#异步线程最长的等待时间秒(只用于when),默认值为15
代码语言:txt
复制
liteflow.when-max-wait-second=20
代码语言:txt
复制
#是否开启监控log打印,默认值为false
代码语言:txt
复制
liteflow.monitor.enable-log=true
代码语言:txt
复制
#监控队列存储大小,默认值为200
代码语言:txt
复制
liteflow.monitor.queue-limit=300
代码语言:txt
复制
#监控一开始延迟多少执行,默认值为300000毫秒,也就是5分钟
代码语言:txt
复制
liteflow.monitor.delay=10000
代码语言:txt
复制
#监控日志打印每过多少时间执行一次,默认值为300000毫秒,也就是5分钟
代码语言:txt
复制
liteflow.monitor.period=10000

总结

代码语言:txt
复制
1) 引入依赖
代码语言:txt
复制
2) 定义流程节点继承NodeComponent 
代码语言:txt
复制
3) 注入:   
代码语言:txt
复制
      @Resource 
代码语言:txt
复制
      private FlowExecutor flowExecutor;
代码语言:txt
复制
4)application.properties:
代码语言:txt
复制
      liteflow.rule-source=config/flow.xml

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 初级开发
  • 中级开发
  • LiteFlow简介
  • 优点:
  • 特性:
  • 架构设计
  • Liteflow适用于哪些场景
  • springboot中集成liteflow
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档