当前位置: 首页 > web >正文

规则引擎rule-engine v1.0实现解释(一)-规则,执行,容器

简介

        规则引擎,就是一种用于管理和执行业务规则的组件。它将业务逻辑从应用程序中剥离出来,以规则的形式进行定义和存储。当需要执行某个业务逻辑时,规则引擎会根据输入的数据,通常是业务类,预定义的规则进行匹配和推理,从而生成相应的操作指令或者决策结果。规则可以以代码实现,但通常规则变更频繁,周期未必与软件同步,因此,规则多用dsl定义,解释执行。

        本文解释规则引擎的实现,规则模型,执行和容器部分。

特性

V1.0 规则,规则执行,执行容器

V2.0 规则编写辅助

V3.0 可视化编写规则

术语/关键词

规则/事实 事实是执行规则的参数,通常是业务相关的类,规则使用事实为基础的一系列的运算,逻辑处理,得出结论或决策

参考资料

common-jexl语法 Apache Commons JEXL Syntax ? JEXL

关于选型

        最初关注drools,研究后,drools相当重,使用不便,学习曲线陡,放弃。回想起之前datax的基于规则的转换器,cdc权限同步,使用过轻量级的规则引擎,如下图

支持if/else,使用工具类,语法类似js,功能强大,使用简单,因此规则引擎继续选用common-jexl

技术架构

上图规则引擎的技术架构图,两个场景

  1. 规则编写与业务同一进程

该情况最方便,业务类已载入jvm,规则引擎可直接使用业务类作为事实

  1. 规则编写与业务不同进程

这种情况统一编写规则,独立一个应用,如果规则使用业务类作为事实,需要动态载入业务包

逻辑架构

下图是规则引擎的逻辑架构

spring boot starter  spring boot自动配置

rule-executor 执行器,负责构建执行容器,构建规则,执行规则

rule-core 规则模型,规则读写

bean-repository 工具库,工具类的注册,动态加载

实现解释

本节详细介绍各模块的详细设计

工程

工程结构与5 逻辑结构一致,这里不重复解释

设计模型

上图主要的设计类,比较直观,不多叙述

spring boot starter

自动配置引用两个bean配置,规则和执行器

API

  • 执行规则,规则在发布状态,支持一个事实和两个事实

public <R> R executeRule(String ruleName, Object fact)

public <R> R executeRule(String ruleName, Object fact1, Object fact2)

  • 测试规则,执行草稿状态规则,支持一个事实和两个事实

public <R> R executeRuleTest(String ruleName, Object fact)

  • 预览规则,预览执行在编辑状态的规则,支持一个事实和两个事实

public <R> R executeRulePreview(String ruleScript, Object fact)

开发示例

依赖

规则引擎提供spring-boot-starter,使用spring boot的自动配置机制构建组件

引用

Starter构建规则执行器,直接注入即可使用

配置

上图是规则引擎配置,script是使用xml,后续生产使用数据库,tools配置执行容器的工具类

编写规则

上图是简单规则例子,展示if/else,运算,工具类调用,单事实/两个事实

NEXT

  • 规则编写辅助

规则编写使用工具类,事实(业务类),列表类型,类型方法和参数提供辅助

  • 低代码编写规则

预置组件,拖拉拽构建规则脚本

http://www.xdnf.cn/news/13861.html

相关文章:

  • Vue3中组件Ref打印Proxy(Object)与defineExpose的深度解析
  • navicat 有免费版了,navicat 官方免费版下载
  • vue2项目开发中遇到的小问题
  • Goland使用手册(1)
  • 【亲测有效】MybatisPlus中MetaObjectHandler自动填充字段失效
  • Tess4J:基于 Java 的 OCR 解决方案
  • php反序列化漏洞学习
  • 电脑PC端使用的备忘录记事软件推荐哪个
  • 【3】使用TRAE AI在已有框架中新增页面并实现切换的痛苦经历
  • boa 找不到动态库的解决办法:
  • 【零基础勇闯嵌入式岗】从单片机低功耗中获得的启发
  • 正则表达式入门
  • 【AIGC】Qwen3-Embedding:Embedding与Rerank模型新标杆
  • 【狂飙AGI】第2课:大模型方向市场分析
  • # Flask:Python的轻量级Web框架入门之旅(超级实用!)
  • 测试过程中有哪些风险?
  • KU115LPE-V10型FPGA加速卡
  • Linux操作系统之文件系统下
  • 友思特方案 | 友思特车载双目相机技术赋能农业:Monarch 智能拖拉机解决方案
  • linux基础day01
  • [25-cv-06422]David律所代理Dreams USA玩具手办商标维权
  • Java日期格式化
  • Swift 解法详解:如何在二叉树中寻找最长连续序列
  • NAS文件共享、PACS影像存储,速率提升400%?
  • PostgreSQL认证怎么选?PGCP中级认证、PGCM高级认证
  • 基于 Redis 的幂等性设计:SpringBoot @Async 在高并发 MySQL 日志存储中的应用
  • Vue3+TypeScript实现迭代器模式
  • FOC电机三环控制
  • aws s3 sdk c++使用指南、适配阿里云oss和aws
  • 「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(一)