开源规则引擎LiteFlow项目应用实践

news2024/11/27 2:31:43

本文介绍基于开源规则引擎LiteFlow,如何开发规则设计器,在低代码平台中集成规则引擎,并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求,所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”等。

逻辑设计规则设计,可以将复杂且多变的业务规则从硬编码中解耦,封装成独立、可复用的业务组件,通过可视化规则设计器按业务需求编排业务组件的执行逻辑,使得业务规则的变更无需修改项目代码、不用重启服务器就可以在线上环境立即生效,实现灵活应对业务需求变化。比如说订单价格计算,有折扣、满减、促销券、会员等级,不同会员等级在不同促销场景下(618、双11等),计算价格的规则是不一样的,这种需求就可以进行规则编排,面对业务需求快速变化,能够及时调整应对。

逻辑设计的使用步骤包括:逻辑组件定义和注册--->逻辑流设计编排--->调用逻辑流

1)逻辑组件定义和注册:将执行逻辑的代码注册成组件,以供后面进行逻辑流的编码。

2)逻辑流设计编排:通过设计器对组件的执行顺序、规则进行编排,形成可执行的逻辑流模型。

3)业务调用逻辑流:在表单、流程等扩展事件中通过HTTP或者Java API进行逻辑流的调用,来执行整个流程。

1.逻辑组件定义和注册

LiteFlow规则引擎支持多种开发语言开发逻辑组件,包括Java、Groovy、JavaScript等;其中后两者又属于脚本组件,可以进行在线注册和代码编写。前者则是需要在后端项目中写代码逻辑,并通过注解声明为一个组件,然后再通过页面将其给注册出来。

2.逻辑流可视化设计编排

逻辑组件开发完成并注册后,接下来就可以设计逻辑流了,打开逻辑流设计器(规则设计器),在线可视化设计逻辑流,可以直接复用注册的逻辑组件,也可以在设计器里直接定义逻辑组件。

设计好了逻辑流模型后,可以进行模拟测试,点击模拟测试,弹出模拟测试框。

在进行模拟测试时,可以填写或修改逻辑流的入参变量填写好后点击右下角测试按钮,即可展示测试结果。

【执行流】执行组件的流向

【执行节点】执行组件执行的各种信息

【整体用时】执行该逻辑流花费了多长时间

3.业务如何调用逻辑流

设计好我们的逻辑流模型后应该怎么去调用,我们目前提供了两种方式,分别是HTTP调用,和在后端代码中通过Java接口来调用执行。

我们首先来构建一个场景,以购物网站购物下单计算价格为例。通常我们网购时都会有各种优惠,比如满减、会员折扣、优惠券等等,这些优惠有时候会有有时候没有,这时我们可以通过逻辑流来编排我们订单价格计算的逻辑。首先我们要把不同的计算逻辑给独立成不同的组件。然后通过我们的逻辑流设计器把组件关联起来。

下面就是我们编排好的逻辑流模型,每个组件都有他们自己的职责,我们可以随意的更改我们的计算逻辑,比如去除满减活动,添加520促销活动的逻辑组件,更换两个组件的执行顺序。

然后在表单按钮点击事件里,自定义脚本通过HTTP服务调用逻辑流来计算订单价格,这样就实现了业务和逻辑流引擎的集成。如果是后端开发需要调用逻辑流,可以直接使用Java API 调用。

在线体验:http://www.yunchengxc.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1803101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka的leader和follower

leader和follower kafka的leader和follower是相对于分区有意义的,不是相对于broker。 因为每个分区都有leader和follower, leader负责读写数据。 follower负责复制leader的数据保存到自己的日志数据中,并在leader挂掉后重新选举出leader。 kafka会再…

Javascript全解(基础篇)

语法与数据类型 语法 var\let\const var 声明一个变量,可选初始化一个值。 let 声明一个块作用域的局部变量,可选初始化一个值。 const 声明一个块作用域的只读常量。 用 var 或 let 语句声明的变量,如果没有赋初始值,则其值为 …

基于VS2022编译GDAL

下载GDAL源码;下载GDAL编译需要依赖的必须代码,proj,tiff,geotiff三个源码,proj需要依赖sqlite;使用cmake编译proj,tiff,geotiff;proj有版本号要求;使用cmake…

go语言实战--基于Vue3+gin框架的实战Cetide网项目(讲解开发过程中的各种踩坑)

最近被要求学习go语言开发,也就做一个项目实战巩固一下,也分享一下关于gin框架的实战项目 (后续应该还是会继续学习Java,这一期还是做一个govue的) 经过一段时间的开发过后,感觉现在的开发效率要快不少了&…

Unity2D游戏制作入门 | 12(之人物受伤和死亡的逻辑动画)

上期链接:Unity2D游戏制作入门 | 11(之人物属性及伤害计算)-CSDN博客 上期我们聊到了人物的自身属性和受伤时的计算,我们先给人物和野猪挂上属性和攻击属性的代码,然后通过触发器触发受伤的事件。物体(人物也好敌人也行&#xff…

使用 Scapy 库编写 ICMP 不可达攻击脚本

一、介绍 ICMP不可达攻击是一种利用ICMP(Internet Control Message Protocol)不可达消息来干扰或中断目标系统的网络通信的攻击类型。通过发送伪造的ICMP不可达消息,攻击者可以诱使目标系统认为某些网络路径或主机不可达,从而导致…

vue2中如何使用函数式组件

vue2 中如何使用函数式组件 用 render 定义函数式组件如何处理 props如何在函数式组件中触发自定义事件?injection如何使用 computed 和 methods定义一个函数式组件的 MyButton函数式组件有何优势哪种场景适合使用函数式组件函数式组件的问题参考 函数式组件&#x…

WPS JSA 宏脚本入门和样例

1入门 WPS window版本才支持JSA宏的功能。 可以自动化的操作文档中的一些内容。 参考文档: WPS API 参考文档:https://open.wps.cn/previous/docs/client/wpsLoad 微软的Word API文档:Microsoft.Office.Interop.Word 命名空间 | Microsoft …

测试工具链

缺陷管理 bug管理工具 devops---项目管理--缺陷管理 bug管理地址 https://devsecops.mychery.com:8443/chery/project?filterROLE&statusACTIVE bug管理环境 采用公司的devops平台,对每个项目的bug进行管理。目前在使用 接口测试和服务端性能测试 工具…

基础乐理入门

基础概念 乐音:音高(频率)固定,振动规则的音。钢琴等乐器发出的是乐音,听起来悦耳、柔和。噪音:振动不规则,音高也不明显的音。风声、雨声、机器轰鸣声是噪音,大多数打击乐器&#…

【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南

文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…

Nextjs学习教程

一.手动创建项目 建议看这个中文网站文档,这个里面的案例配置都是手动的,也可以往下看我这个博客一步步操作 1.在目录下执行下面命令,初始化package.json文件 npm init -y2.安装react相关包以及next包 yarn add next react react-dom // 或者 npm install --save next react…

2024最新 Jenkins + Docker实战教程(八)- Jenkins实现集群并发构建

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

转型AI产品经理(4):“认知负荷”如何应用在Chatbot产品

认知负荷理论主要探讨在学习过程中,人脑处理信息的有限容量以及如何优化信息的呈现方式以促进学习。认知负荷定律认为,学习者的工作记忆容量是有限的,而不同类型的认知任务会对工作记忆产生不同程度的负荷,从而影响学习效果。以下…

Java面试八股之什么是自动装箱和自动拆箱

什么是自动装箱和自动拆箱 在Java中,自动装箱(Autoboxing)和自动拆箱(Auto-unboxing)是两个与基本数据类型和它们对应的包装类之间的转换相关的特性。这两个概念自Java 5(也称为Java SE 5或JDK 5&#xff…

SpringBoot3整合Mybatis-Plus3.5.5出现的问题

主要是由于 mybatis-plus 中 mybatis 的整合包版本不够导致的 排除 mybatis-plus 中自带的 mybatis 整合包,单独引入即可 java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanObjectType: java.lang.Stringat org.springframework.…

Linux安装Qt5.14.2

下载 qt 5.14.2下载网址 下载qt-opensource-linux-x64-5.14.2.run Linux系统下载.run文件(runfile文件),windows系统下载.exe文件,mac系统下载.dmg文件。 md5sums.txt中是各个文件对应的MD5校验码。 验证MD5校验码 md5sum是li…

例54:Draw使用

建立一个控制台工程,输入代码: Screen 13 移动到(50,50)而不绘图 Draw "BM 50,50" B:移动但不绘制,M:移动到指定位置 将绘图颜色设置为2(绿色) Draw "C2" C将颜色改为n …

后台管理系统排序混乱,分页出现重复条例

检查了接口和请求参数都没有问题。 查询数据库发现是排序字段create_time 都相同导致的。没有区分度。 解决方案 按照唯一id排序 避免create_time 大批量相同 order by create_time ,xxx 两个排序字段

171.二叉树:二叉树的所有路径(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr, right(nullptr) {}* Tree…