表达式规则引擎
一款基于Aviator封装可以动态配置动态函数和变量来形成表达式的引擎,可通过定义表达式、编排、追踪、搜索等能力完成表达式的可视化处理流程,更直观、更灵活、简单高效的完成复杂的业务规则。
github:[文档地址](https://github.com/liukaixiong/expression-mind-map-engine)
gitee :[文档地址](https://gitee.com/liukaixiong/expression-mind-map-engine)
功能涵盖
-
表达式实时配置生效、支持动态编排业务规则能力、效率直接翻倍
-
函数变量标准实现,并支持流程控制函数如:break、return、分支进入即结束,非常适合基础业务能力研发
-
基于思维导图的可视化表达式配置界面,复杂逻辑可以更灵活更直观的维护
-
支持表达式内部执行规则分支链路追踪,成功或者失败一目了然
-
支持表达式模糊搜索、变动、近期是否被执行能力:更直观检索表达式、维护表达式
-
支持跨服务的调用【服务端负责规则配置以及规则追踪数据收集、客户端负责规则的运算触发】,支持注册中心适配以及指定固定ip直连
-
支持规则的导入导出功能,支持跨环境一键导入导出
-
自定义能力的动态开关
-
版本支持: 支持jdk 8+,spring-boot 2.x , jdk 17 + spring-boot 3.x
仅依赖redis和mysql
应用场景
配置化的能力
-
一些业务需要动态配置,时用时不用,新建字段又比较浪费
-
开关能力: 某时某刻(时间纬度)生效,某些业务类型才能触发
-
通用能力:是否重复、达到多少次触发、变量上下文运算、是否黑白名单内、业务告警.【可自行设计】
-
前置后置能力处理: 业务方法的前置拦截、参数校验、数据补全;业务方法后置处理:回调触发、短信发送、状态变更
-
• 你可以将业务【接口】局部或者整体接管交给规则引擎,你要做的仅仅只是丰富想要的能力,去做定制化配置。
-
参数过滤转化: 为一些不规范的数据,做数据过滤、转换
以上场景都可通过设计函数或者变量来形成基础能力,通过表达式配置形成规则。
业务灵活重组编排
-
xxx: 那个功能下掉,又或者下掉5分钟,等处理完再打开?
-
xxx: 去掉其中这个规则,把这个规则挪到其他分支下去
-
xxx: 这个功能只让特定人使用【黑白名单】
通过规则管理来配置,并且实时生效
基础能力的沉淀
【自行研发】
-
黑白名单
-
是否可重复执行
-
业务核心能力
-
积分发送
-
短信发送
-
告警接入
你可以理解为表达式引擎为你打造了一个这样的业务定制平台,你可以按照标准去实现自己的业务能力,前提是这些能力的粒度越小【单一职责】,它复用的可能性就越大,能力建设到一定程度,剩下的就只有配置业务表达式即可。
其实相比于直接写脚本或者单一写表达式的方式,逻辑分支(思维导图)的方式更直观、清晰、好维护,再加上追踪能力更加高效直观定位到哪些逻辑分支被执行了,哪些分支不满足,不满足的原因是什么,都可以更加快速发现问题。
配置表达式
1. 执行器页面
规则列表: http://localhost:20888/template/executor-list.html
规则配置列表
配置规则页面 :
自定义规则配置详情
基于分支创建表达式
或者选中节点,按Tab键,即可创建子节点
创建子节点规则
- 简单的检索能力:客户端编写的函数,会被搜索到,方便编写不易出错。
搜索当前可用的函数以及变量检索
2. 链路追踪列表
【已经执行过的规则】: http://localhost:20888/template/trace-list.html
规则追踪能力
- 点击查看追踪信息【会携带追踪编号,去规则中匹配当时执行的调试日志记录】
当前规则被执行的调试分支
选择某个分支展示的追踪信息
在这里插入图片描述
流程图
规则执行过程
表达式配置玩法
1. 基于执行顺序的优先级【从上到下】
-
最上层:定义通用基础属性、业务数据初始化
-
中间层:具象业务事件处理
-
最下层:通用的回调模型
2. 基于业务模型的分支【从左到右】
-
业务事件确定
-
条件规则限制
-
业务逻辑触发
-
完成事件回调
🏆 最佳实践案例
| 场景 | 解决方案 | | --- | --- | | 任务系统 | 动态配置积分规则+完成条件 | | 转介绍活动 | 实时调整邀请层级/奖励系数 | | 开屏页接口 | 根据用户标签返回差异化内容 | | 抽奖系统 | 概率权重动态调整+黑名单拦截 | | 后台系统结合案例(待补充) | 产品配置化,后台系统配置 |
开源地址
github: github.com/liukaixiong…
gitee : gitee.com/liukaixiong…