当前位置:首页 > 科技  > 软件

强烈推荐强大的规则引擎框架LiteFlow

来源: 责编: 时间:2024-02-29 14:43:50 247观看
导读环境:SpringBoot2.7.161. 简介LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这

环境:SpringBoot2.7.16ShT28资讯网——每日最新资讯28at.com


1. 简介

LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。ShT28资讯网——每日最新资讯28at.com

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

LiteFlow优势

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

图片图片ShT28资讯网——每日最新资讯28at.com

组件可实时热更替,也可以给编排好的逻辑流里实时增加一个组件,从而改变你的业务逻辑。ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

LiteFlow的脚本组件,支持众多脚本语言,完全和Java打通,你可以用脚本来实现任何逻辑。ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

LiteFlow支持把编排规则和脚本放在数据库,注册中心中,还有可以任意扩展的接口,方便你定制。ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

LiteFlow支持你能够想象处理的任何逻辑流程,如下流程:ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

规则文件

LiteFlow支持3中格式的规则文件定义:XML,JSON,YML。以下是XML示例:ShT28资讯网——每日最新资讯28at.com

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

规则说明

THNE:串行执行,a执行===》执行b===》执行cShT28资讯网——每日最新资讯28at.com

WHEN:并行执行ShT28资讯网——每日最新资讯28at.com

<chain name="chain1">    WHEN(a, b, c);</chain>

SWITCH:选择执行ShT28资讯网——每日最新资讯28at.com

<chain name="chain1">    SWITCH(a).to(b, c, d);</chain>

图片图片ShT28资讯网——每日最新资讯28at.com

IF:条件执行ShT28资讯网——每日最新资讯28at.com

IF二元ShT28资讯网——每日最新资讯28at.com

<chain name="chain1">    THEN(        IF(x, a),        b    );</chain>

图片图片ShT28资讯网——每日最新资讯28at.com

其中x为条件节点,为真的情况下,执行链路就为x->a->b,为假链路就为x->b。ShT28资讯网——每日最新资讯28at.com

IF三元ShT28资讯网——每日最新资讯28at.com

<chain name="chain1">    THEN(        IF(x, a, b),        c    );</chain>

图片图片ShT28资讯网——每日最新资讯28at.com

还有其它很多的规则,这里不一一举例,可以查看官网。ShT28资讯网——每日最新资讯28at.com

2. 实战案例

环境配置ShT28资讯网——每日最新资讯28at.com

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

配置文件ShT28资讯网——每日最新资讯28at.com

#liteflow 配置liteflow:  rule-source: flows/*.el.xml


ShT28资讯网——每日最新资讯28at.com

整个规则流程执行如下ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com


ShT28资讯网——每日最新资讯28at.com

规则定义ShT28资讯网——每日最新资讯28at.com

<?xml versinotallow="1.0" encoding="UTF-8"?><flow>    <chain name="processOrder">        THEN(          initOrder,           IF(amount, discountOrder),          SWITCH(userType).to(vipDiscountOrder, normalDiscountOrder),          completeOrder        )    </chain></flow>

这里的initOrder,amount,discountOrder等都是具体Node接口是bean的名称。ShT28资讯网——每日最新资讯28at.com

初始化订单组件

@Component("initOrder")public class InitOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("初始化订单...") ;    Order order = this.getContextBean(Order.class) ;    double sum = order.getItems().stream().mapToDouble(item -> {      return item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).doubleValue() ;    }).sum() ;    order.setTotalAmount(BigDecimal.valueOf(sum));  }}

这里只做了计算订单总额。ShT28资讯网——每日最新资讯28at.com

判断订单总额节点
ShT28资讯网——每日最新资讯28at.com

@Component("amount")public class AmountComponent extends NodeIfComponent {  @Override  public boolean processIf() throws Exception {    System.out.println("判断总金额,超过100元打折") ;    Order order = this.getContextBean(Order.class) ;    return order.getTotalAmount().doubleValue() >= 100D ;  }}

用户类型判断,执行哪个节点ShT28资讯网——每日最新资讯28at.com

@Component("userType")public class UserTypeComponent extends NodeSwitchComponent {  @Override  public String processSwitch() throws Exception {    User user = this.getContextBean(User.class) ;    if (user.isVip()) {      return "vipDiscountOrder" ;    }    return "normalDiscountOrder" ;  }}

上面返回的是具体节点的beanName。ShT28资讯网——每日最新资讯28at.com

VIP折扣节点
ShT28资讯网——每日最新资讯28at.com

@Component("vipDiscountOrder")public class VIPDiscountOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("VIP会员打9折") ;    Order order = this.getContextBean(Order.class) ;    order.setTotalAmount(order.getTotalAmount().multiply(BigDecimal.valueOf(9)).divide(BigDecimal.valueOf(10), RoundingMode.HALF_UP)) ;  }}

普通会员折扣节点ShT28资讯网——每日最新资讯28at.com

@Component("normalDiscountOrder")public class NormalDiscountOrderComponent extends NodeComponent {  @Override  public void process() {    System.out.println("普通会员不打折") ;  }}

完成节点ShT28资讯网——每日最新资讯28at.com

@Component("completeOrder")public class CompleteOrderComponent extends NodeComponent  {  @Override  public void process() throws Exception {    System.out.println("订单折扣执行完成,最后收尾...") ;  }}

以上是该规则流程的所有配置及定义。接下来进行测试ShT28资讯网——每日最新资讯28at.com

// 直接注入该类进行规则流程的启动执行@Resourceprivate FlowExecutor flowExecutor;@Testpublic void testExample02() {  Order order = new Order() ;  order.setId(1L) ;  order.setSno("S001") ;  List<OrderItem> items = new ArrayList<>() ;  items.add(new OrderItem(1L, 2, BigDecimal.valueOf(22))) ;  items.add(new OrderItem(2L, 1, BigDecimal.valueOf(24.5))) ;  items.add(new OrderItem(3L, 5, BigDecimal.valueOf(66.3))) ;  order.setItems(items) ;  User user = new User() ;  user.setId(1L) ;  user.setVip(false) ;  LiteflowResponse response = flowExecutor.execute2Resp("processOrder", null, order, user);  if (!response.isSuccess()) {    Exception e = response.getCause() ;    e.printStackTrace() ;  } else {    System.out.println("流程成功执行...") ;    System.out.println("最终应付款:" + response.getContextBean(Order.class).getTotalAmount().doubleValue()) ;  }}

控制台将会输出详细的信息。ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

修改用户类型后执行ShT28资讯网——每日最新资讯28at.com

图片图片ShT28资讯网——每日最新资讯28at.com

以上是本篇文章的全部内容,希望对你有所帮助。ShT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-75360-0.html强烈推荐强大的规则引擎框架LiteFlow

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue3问题:如何实现拼图验证+邮箱登录功能?前后端!

下一篇: 掌握 Python 栈,轻松实现进制转换

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的&ldquo;新电商三兄弟&rdquo;成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top