LiteFlow规则引擎框架

2024-02-09 21:28
文章标签 引擎 规则 框架 liteflow

本文主要是介绍LiteFlow规则引擎框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LiteFlow规则引擎框架

Hi,我是阿昌,今天介绍一个规则引擎框架,LiteFlow;

一、前言

那首先得知道什么是规则引擎?规则引擎是 一种用于自动化处理业务规则的软件组件。

在软件行业中,规则引擎通常用于解决复杂的业务逻辑处理问题。它可以将业务规则从应用程序中分离出来,并以一种易于管理维护的方式进行配置和修改。

规则引擎能够根据预先定义的规则集对输入数据进行评估和处理,并根据规则的结果执行相应的操作。这样可以提高软件系统的灵活性、可扩展性和可维护性。

规则引擎在许多软件领域都有广泛的应用,比如金融行业的风险评估、保险业的理赔处理、电子商务的促销活动等。

一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部资源调取,内部其他系统RPC调用等等。时间一长,项目几经易手,维护成本就会越来越高。各种硬代码判断,分支条件越来越多。

代码的抽象,复用率也越来越低,各个模块之间的耦合度很高。一小段逻辑的变动,会影响到其他模块,需要进行完整回归测试来验证。

如要灵活改变业务流程的顺序,则要进行代码大改动进行抽象,重新写方法。实时热变更业务流程,几乎很难实现,那LiteFlow为解耦逻辑而生,为编排而生。


二、优势

  • 一个编排式的规则引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件。
    • 可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。
    • LiteFlow拥有开源规则引擎最为简单的DSL语法
      在这里插入图片描述
  • 组件可实时热更替,也可以给编排好的逻辑流里实时增加一个组件,从而改变你的业务逻辑。
    在这里插入图片描述
  • 支持众多脚本语言,完全和Java打通,你可以用脚本来实现任何逻辑。
    在这里插入图片描述
  • 配置存放灵活,支持把编排规则和脚本放在数据库,注册中心中,还有可以任意扩展的接口,方便定制。
    在这里插入图片描述
  • 同时要保证所有组件都是灵活可变的。
    在这里插入图片描述

三、场景情况

1、适用场景

LiteFlow适用于拥有复杂逻辑的业务,比如说价格引擎,下单流程等,这些业务往往都拥有很多步骤,这些步骤完全可以按照业务粒度拆分成一个个独立的组件,进行装配复用变更。

可得到一个灵活度高,扩展性很强的系统。

因为组件之间相互独立,也可以避免改一处而动全身的这样的风险。

2、不适用场景

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


四、HelloWorld

liteflow支持多种框架的引入,场景的springboot、spring或非spring场景

1、前置版本

下面的代码是基于此版本进行演示:

  • springboot:2.3.4.RELEASE
  • jdk:1.8
  • liteflow-springboot:2.11.4.2

2、依赖

LiteFlow提供了liteflow-spring-boot-starter依赖包,提供自动装配功能

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

3、组件定义

在依赖了以上jar包后,需要定义并实现一些组件,确保SpringBoot会扫描到这些组件并注册进上下文。
定义如下:a,b,c组件

/*** @author achang* @date 2024/2/8 - 12:27 下午**/
@Component(value = "a")
public class AComponent extends NodeComponent {@Overridepublic void process() throws Exception {System.out.println("do A");}
}
/*** @author achang* @date 2024/2/8 - 12:27 下午**/
@Component(value = "b")
public class BComponent extends NodeComponent {@Overridepublic void process() throws Exception {System.out.println("do B");}
}
/*** @author achang* @date 2024/2/8 - 12:27 下午**/
@Component(value = "c")
public class CComponent extends NodeComponent {@Overridepublic void process() throws Exception {System.out.println("do C");}}

4、springboot配置

在SpringBoot的application.properties或者application.yml里添加配置(这里以properties为例,yaml也是一样的),更多的配置项

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

5、流程规则编写

在上面flow.el.xml文件中编写流程规则

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

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

6、测试执行

编写测试执行类

/*** @author achang (caimu.zyc@raycloud.com)* @date 2024/2/8 - 12:34 下午* 执行测试组件**/
@Component("testHandleComponent")
public class TestHandleComponent {@Resourceprivate FlowExecutor flowExecutor;public void testHandle(String arg){LiteflowResponse liteflowResponse = flowExecutor.execute2Resp("tagChain", arg);System.out.println("done");}}

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

编写测试入口:

@SpringBootTest
class LiteFlowDemoApplicationTests {@Autowiredprivate TestHandleComponent testHandleComponent;@Testvoid contextLoads() {testHandleComponent.testHandle("achang");}
}

执行结果控制台:
在这里插入图片描述
那这样子用liteflow写了一个最简单的一个demo,可以看到用代码定于组件的代码然后,在流程规则中编写对组件之间流程执行的编写,这样子就可以将业务之间抽象成一个一个的组件,然后进行编排解藕达成目的,

那liteflow还有很多的高级特性,如:配置源的设置/多重组件的编写/EL规则的写法/数据上下文的玩法/执行器/脚本组件等等等等特性,在官方文档都有介绍,有兴趣的可以看:LiteFlow


这篇关于LiteFlow规则引擎框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695325

相关文章

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Nginx路由匹配规则及优先级详解

《Nginx路由匹配规则及优先级详解》Nginx作为一个高性能的Web服务器和反向代理服务器,广泛用于负载均衡、请求转发等场景,在配置Nginx时,路由匹配规则是非常重要的概念,本文将详细介绍Ngin... 目录引言一、 Nginx的路由匹配规则概述二、 Nginx的路由匹配规则类型2.1 精确匹配(=)2

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component