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

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

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

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


1. 简介

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

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

LiteFlow优势

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

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

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

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

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

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

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

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

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

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

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

规则文件

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

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

规则说明

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. 实战案例

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

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

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

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


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

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

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


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

规则定义0ou28资讯网——每日最新资讯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的名称。0ou28资讯网——每日最新资讯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));  }}

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

判断订单总额节点
0ou28资讯网——每日最新资讯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 ;  }}

用户类型判断,执行哪个节点0ou28资讯网——每日最新资讯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。0ou28资讯网——每日最新资讯28at.com

VIP折扣节点
0ou28资讯网——每日最新资讯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)) ;  }}

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

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

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

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

以上是该规则流程的所有配置及定义。接下来进行测试0ou28资讯网——每日最新资讯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()) ;  }}

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • iQOO Neo8系列或定档5月23日:首发天玑9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top