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

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

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

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

功能特性

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

系统架构


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

框架优势

如果要对复杂业务逻辑进行新写或者重构,用 LiteFlow 最合适不过。它是一个编排式的规则引擎框架,组件编排,帮助解耦业务代码,让每一个业务片段都是一个组件。

利用 LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。LiteFlow 拥有开源规则引擎最为简单的 DSL 语法。十分钟就可上手。

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

组件可实时热更替,也可以给编排好的逻辑流里实时增加一个组件,从而改变你的业务逻辑。

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

LiteFlow 的脚本组件,支持众多脚本语言,完全和 Java 打通,可以用脚本来实现任何逻辑。

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

LiteFlow 支持把编排规则和脚本放在数据库,注册中心中,还有可以任意扩展的接口,方便定制。

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

LiteFlow 编排语法强大到可以编排出任何想要的逻辑流程,你有想过,要在代码中实现下面这种复杂逻辑流程该如何实现吗?

「例如:」

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

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

同时要保证所有组件都是灵活可变的。

我相信肯定有人能实现,但是是需要付出一定的开发成本的。

而以上这一切,利用 LiteFlow,轻而易举,你立马唾手可得!

适用场景

适用于哪些场景:

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

不适用于哪些场景:

LiteFlow 自开源来,经常有一些小伙伴来问我,如何做角色任务之间的流转,类似于审批流,A 审批完应该是 B 审批,然后再流转到 C 角色。

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

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
 }
}
  1. 以此类推再分别定义 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 属性,具体请看数据上下文这一章节。

示例

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

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


传送门

开源协议:Apache2.0

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

「回复【加群】加入开源技术交流群,干货很多!」

-END-

原文始发于微信公众号(开源技术专栏):开箱即用的轻量级组件式规则引擎 LiteFlow

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135617.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!