您当前的位置:首页 > 电脑百科 > 程序开发 > 开源程序 > 百科

开箱即用的轻量级组件式规则引擎LiteFlow

时间:2022-07-29 10:46:40  来源:  作者:GitHub精选

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个轻量级的规则引擎框架——LiteFlow。

 

在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护的成本就会越来越高。各种硬代码判断,分支条件越来越多。代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现。

如何打破僵局?LiteFlow为解耦逻辑而生,为编排而生,在使用LiteFlow之后,你会发现打造一个低耦合,灵活的系统会变得易如反掌!

 

功能特性

  • 组件定义统一: 所有的逻辑都是组件,为所有的逻辑提供统一化的组件实现方式,小身材,大能量。
  • 规则轻量: 基于规则文件来编排流程,学习规则入门只需要5分钟,一看即懂。
  • 规则多样化: 规则支持xml、json、yml三种规则文件写法方式,喜欢哪种用哪个。
  • 任意编排: 同步异步混编,再复杂的逻辑过程,利用LiteFlow的规则,都是很容易做到的,看规则文件就能知道逻辑是如何运转的。
  • 规则能从任意地方加载: 框架中提供本地文件配置源和zk配置源的实现,也提供了扩展接口,您可以把规则存储在任何地方。
  • 优雅热刷新机制: 规则变化,无需重启您的应用,即时改变应用的规则。高并发下不会因为刷新规则导致正在执行的规则有任何错乱。
  • 支持广泛: 不管你的项目是不是基于Springboot,Spring还是任何其他JAVA架构建,LiteFlow都能游刃有余。
  • JDK支持: 从JDK8到JDK17,统统支持。无需担心JDK版本。
  • 脚本语言支持: 可以定义脚本语言节点,支持QLExpress和Groovy两种脚本。未来还会支持更多的脚本语言。
  • 规则嵌套支持: 只要你想得出,你可以利用简单的表达式完成多重嵌套的复杂逻辑编排。
  • 组件重试支持: 组件可以支持重试,每个组件均可自定义重试配置和指定异常。
  • 上下文隔离机制: 可靠的上下文隔离机制,你无需担心高并发情况下的数据串流。
  • 声明式组件支持: 你可以让你的任意类秒变组件。
  • 详细的步骤信息: 你的链路如何执行的,每个组件耗时多少,报了什么错,一目了然。
  • 稳定可靠: 历时2年多的迭代,在各大公司的核心系统上稳定运行。
  • 性能卓越: 框架本身几乎不消耗额外的性能,性能取决你的组件执行效率。
  • 自带简单监控: 框架内自带一个命令行的监控,能够知道每个组件的运行耗时排行。

 

系统架构

 

框架优势

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

LiteFlow利用规则表达式为驱动引擎,去驱动你定义的组件。你有想过类似以下的多线程流程编排该如何写吗?

 

 

这一切利用LiteFlow轻而易举!框架的表达式语言学习门槛很低,但是却可以完成超高复杂度的编排。

 

适用场景

不适用于哪些场景:

LiteFlow只做基于逻辑的流转,而不做基于角色任务的流转。如果你想做基于角色任务的流转,推荐使用flowable,activiti这2个框架。

适用于哪些场景:

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

 

Springboot场景安装运行

依赖:

<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.8.2</version>
</dependency>

配置:

组件的定义:

1、在依赖了以上jar包后,你需要定义并实现一些组件,确保SpringBoot会扫描到这些组件并注册进上下文

@Component("a")
public class ACmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

2、以此类推再分别定义b,c组件

@Component("b")
public class BCmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}
@Component("c")
public class CCmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

SpringBoot配置文件:

然后,在你的SpringBoot的Application.properties或者application.yml里添加配置(这里以properties为例,yaml也是一样的)

liteflow.rule-source=config/flow.el.xml

规则文件的定义:

同时,你得在resources下的config/flow.el.xml中定义规则

<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <chain name="chain1">
        THEN(a, b, c);
    </chain>
</flow>

SpringBoot在启动时会自动装载规则文件。

执行:

声明启动类:

@SpringBootApplication
//把你定义的组件扫入Spring上下文中
@ComponentScan({"com.xxx.xxx.cmp"})
public class LiteflowExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(LiteflowExampleApplication.class, args);
    }
}

然后你就可以在Springboot任意被Spring托管的类中拿到flowExecutor,进行执行链路:

@Component
public class YourClass{
    
    @Resource
    private FlowExecutor flowExecutor;
    
    public void testConfig(){
        LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
    }
}

提示:

这个DefaultContext是默认的上下文,用户可以用最自己的任意Bean当做上下文传入,如果需要传入自己的上下文,则需要传用户Bean的Class属性,具体请看数据上下文这一章节。

 

示例

这个案例为一个价格计算引擎,其目的是模拟了电商中对订单价格的计算。

 

 

—END—

开源协议:Apache2.0

开源地址:
https://github.com/dromara/liteflow



Tags:LiteFlow   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个轻量级的规则引擎框架&mdash;&mdash;LiteFlow。...【详细内容】
2022-07-29  Tags: LiteFlow  点击:(222)  评论:(0)  加入收藏
liteflow整体分为两个模块,控制台以及执行者;其中控制台负责任务的关系以及执行的调度,执行者负责任务的具体执行。控制台中主要的功能围绕在任务以及任务流。一、主要功能介绍...【详细内容】
2020-08-06  Tags: LiteFlow  点击:(1423)  评论:(0)  加入收藏
▌简易百科推荐
开源为我们的开发带来了极大便利,但这些便利也伴随着一些安全隐患。每当项目引入一个库、框架、服务时,随之而来的安全风险也不可忽视。所以,当开源吞噬世界的时候,代码安全就...【详细内容】
2022-11-04  HelloGitHub  今日头条  Tags:开源   点击:(3)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个阿里开源基于 Flutter 进行渲染的高性能引擎&mda...【详细内容】
2022-11-03  GitHub精选  今日头条  Tags:Kraken   点击:(6)  评论:(0)  加入收藏
Ghips 是一个仅 600 KB 的开源软件:GitHub.com/aardio/Ghips支持 Win7,Win8,Win10,Win11 等操作系统。软件通过 GitHub 官方 API 获取所有 IP,并自动找到最快 IP。 更新 IP 后首...【详细内容】
2022-11-02  aardio    Tags:GitHub   点击:(56)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是由抖音前端技术团队开源的企业产品设计系统&mdash;&m...【详细内容】
2022-09-08  互联网资讯看板     Tags:Semi Design   点击:(103)  评论:(0)  加入收藏
AWS、Splunk等十几家科技公司宣布启动了一个开源项目,该项目旨在帮助企业更有效地应对网络攻击。该项目被称为Open Cybersecurity Schema Framework(OCSF),是由AWS和Splunk发起...【详细内容】
2022-08-17  至顶头条    Tags:OCSF   点击:(61)  评论:(0)  加入收藏
Astro 是一款现代化的轻量级静态站点生成器,具有出众的开发者体验 (Developer Experience)。据介绍,虽然 Astro 从诞生到今天只有 16 个月,但其仓库的 star 数已超过 13000,并且...【详细内容】
2022-08-11  开源中国OSC    Tags:Astro   点击:(73)  评论:(0)  加入收藏
前言&emsp;&emsp;「一个优秀的开发者,一定是会利用各种工具来提升自己的开发效率。」 前段时间,博主在Gitee/Github开源了一个提升开发效率的工具,工具内集成了各种常用工具如c...【详细内容】
2022-08-09  IT学习日记    Tags:开源工具   点击:(62)  评论:(0)  加入收藏
一、开源项目简介GoAccess 是什么?GoAccess 是一款开源的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序(terminal)即可访问。...【详细内容】
2022-08-03  一飞开源    Tags:日志分析   点击:(111)  评论:(0)  加入收藏
AppFlowy 旨在成为 Notion 的开源替代品,为你提供更好的隐私保护。让我们了解一下它。虽然项目管理/笔记工具 Notion 功能非常出色,但它并不是一个开源解决方案。此外,它没有 L...【详细内容】
2022-08-02  Sagar Sharma  Linux中国  Tags:AppFlowy   点击:(114)  评论:(0)  加入收藏
随着微服务的流行,越来越多应用采用微服务架构开发。如何简单高效地在微服务中完成数据处理成为大家不得不面对的问题。以往单体应用架构下,我们可以借助数据库实施计算,SQL 是...【详细内容】
2022-08-01  微服务布道者    Tags:开源   点击:(141)  评论:(0)  加入收藏
站内最新
站内热门
站内头条