Skip to content

这是一个基于 Java、高性能 Akka Actor 模型 和 Aviator表达式引擎 构建的灵活、强大的规则引擎系统。该引擎专注于高并发、复杂的业务规则定义、组合和执行,适用于需要快速决策和弹性调度的场景。

License

Notifications You must be signed in to change notification settings

threefish/rule-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

规则引擎

这是一个基于 Java、高性能 Akka Actor 模型Aviator表达式引擎 构建的灵活、强大的规则引擎系统。该引擎专注于高并发、复杂的业务规则定义、组合和执行,适用于需要快速决策和弹性调度的场景。

前端源码获取

项目特点

  • 核心调度:基于 Akka Actor 模型:利用 Akka 的高并发、异步和容错能力,实现规则流程节点间的并行、分支和聚合的弹性调度。
  • 表达式核心:基于 Aviator 引擎:提供高性能的表达式解析和执行,支持复杂的逻辑计算。
  • 灵活的规则定义:支持多种操作符、组合方式和条件类型。
  • 流程驱动:基于流程模型编排规则执行的逻辑和顺序。
  • 自动重试机制:节点执行失败时支持配置化的自动重试策略。
  • 线程安全的上下文管理:通过 FlowContext 实现节点间安全的数据共享。

核心概念

规则 (Rule)

规则是规则引擎的基本构建块,包含条件定义和执行逻辑。

  • 基本条件:单个字段的比较操作(等于、大于、小于等)
  • 复合条件:通过AND/OR组合多个子规则
  • 支持的操作符
  • 比较操作符:=!=<><=>=
  • 字符串操作符:containsnotContainslikenotLikebeginWithendWith
  • 集合操作符:inCollectionnotInCollectionbetweennotBetween
  • 空值判断:isNullisNotNullisEmptyisNotEmpty

规则动作 (RuleAction)

规则动作定义了规则满足条件时的行为。

  • 条件规则:定义触发条件的whenRule
  • 满足动作:条件满足时执行的thenActions
  • 不满足动作:条件不满足时执行的otherwiseActions

规则集 (RuleSet)

规则集是规则动作的集合,支持批量管理和执行规则。

流程模型 (ProcessModel)

流程模型定义了规则引擎的执行流程和节点。

  • 起始节点:流程的入口点
  • 结束节点:流程的终止点
  • 业务对象模型:定义流程中使用的数据模型
  • 执行监听器:监听流程执行事件

流程执行上下文 (FlowContext)

线程安全的上下文对象,用于在多个节点间共享数据,提供并发安全的数据访问机制。

节点行为 (NodeBehavior)

定义节点的执行逻辑,每个节点类型可以有自己的行为实现。

核心模块

  1. 规则引擎核心 (engine)
  • actor:基于 Akka 的高并发流程调度和节点编排。
  • aviator:Aviator表达式执行器和自定义函数。
  • rule:规则定义和规则动作模型。
  • definition:流程定义和模型解析。
  • runtime:流程运行时服务和上下文。
  • common:公共工具和常量。
  1. 核心服务组件
  • ProcessRunService:流程启动和执行的核心服务。
  • AkkaRuleFlowScheduler:基于 Akka 的规则流程调度器。
  • RuleFlowService:规则流程的持久化服务。

技术栈

  • Java:主要开发语言
  • Akka:用于高并发流程调度的 Actor 模型框架
  • Aviator:高性能表达式解析和执行引擎
  • Spring Boot:服务层框架

规则引擎工作流程

  1. 规则定义:创建规则对象,设置条件和操作符。
  2. 流程构建:定义流程模型,通过网关节点编排串行、并行、分支和聚合逻辑。
  3. 流程执行:调用 ProcessRunService 启动流程实例。
  4. Actor 调度:AkkaRuleFlowScheduler 创建 WorkflowInstanceActor 控制流程。
  5. 节点执行:WorkflowInstanceActor 调度 NodeWorkerActor 执行各个节点。
  6. 依赖处理:通过 NodeDependencyBuilder 管理节点间依赖,支持串行和并行执行。
  7. 汇聚处理:处理多个并行分支的汇合逻辑。
  8. 自动重试:节点执行失败时自动触发配置的重试策略。
  9. 结果处理:根据规则执行结果执行相应的动作或输出决策。

表达式执行

规则引擎使用Aviator表达式引擎来执行规则表达式:

  • 自动类型转换:支持数字、字符串等类型的精确计算
  • 缓存机制:支持表达式缓存,提高性能
  • 自定义函数:可扩展的自定义函数支持
  • 上下文管理:提供表达式执行的上下文环境

扩展点

  1. 自定义函数:实现AviatorFunction接口,添加自定义表达式函数
  2. 执行监听器:添加流程执行事件监听器
  3. 节点行为:自定义节点执行行为
  4. 流程定义服务:实现ProcessDefinitionService接口,自定义流程模型的加载方式

快速开始

环境要求

  • JDK 17+
  • Maven 3.6+

使用示例

执行规则流程

  • 通过 ProcessRunService 执行规则流程:
ProcessRunService processRunService = ...; // 获取服务实例
Map<String, Object> variables = new HashMap<>(); // 设置输入变量
ExcuteRuleFlowVO.Request createProcessRequest = new ExcuteRuleFlowVO.Request();  
createProcessRequest.setKey("myRuleKey");  
createProcessRequest.setVariables(map);  
ExcuteRuleFlowVO.Response result = processRunService.excute(createProcessRequest);

适用场景

✅ 适用场景 (高并发、快速决策、复杂条件)

场景 核心特点 示例
实时风险评估 需要在毫秒级对大量请求进行多维度、并行判断,以快速做出“是”或“否”的决策。 信贷审批: 用户提交贷款申请,引擎同时检查“信用分数 > 600?”、“工作年限 > 1年?”、“负债率 < 50%?”等多个规则,快速决定是否通过。
复杂的费用核算 涉及多个条件分支,计算过程需要复杂的顺序和并行操作。 订单折扣: 计算一个订单的最终价格时,引擎同时跑“会员折扣”、“地区运费”、“满减活动”等规则,并将结果合并得出最终应付金额。
动态营销推荐 根据用户当前的状态或行为,在短时间内触发一系列个性化动作或推荐逻辑。 App 消息推送: 用户打开 App,引擎快速判断:“上次登录时间超过 7 天” 或 “购物车有未付款商品”,立即推送相应的召回消息或优惠券。

❌ 不适用场景 (长事务、人工干预、纯数据操作)

场景 核心特点 示例
长事务/人工审批流 流程涉及需要长时间(几小时到几天)等待人工输入或审批的步骤,Akka 的优势难以发挥。 员工报销: 员工提交报销单,流程需要等待财务人员审核、领导签字,耗时较长,且涉及到资源锁定和持久化。
纯粹的数据存储与查询 流程的主要目的是简单地进行 CRUD (增删改查) 操作,没有复杂的业务判断逻辑。 数据归档: 定时将一年前的订单记录从在线数据库迁移到历史数据库,核心是数据迁移而非业务决策。
大规模数据批量ETL 针对 TB 级别的数据进行清洗、转换和加载,重点在于数据吞吐量和资源管理,而非流程编排。 日志处理: 每晚运行程序,读取上百万条服务器日志,清洗格式,然后统一导入大数据平台。

截图展示

以下是规则引擎的主要功能截图:

规则引擎界面1

规则引擎界面

规则引擎界面2

规则引擎界面2

规则引擎界面3

规则引擎界面3

规则引擎界面4

规则引擎界面3

规则引擎界面5

规则引擎界面3

条件构造界面

条件构造界面

表达式编辑界面

表达式编辑界面

联系信息

作者:黄川 ([email protected])

About

这是一个基于 Java、高性能 Akka Actor 模型 和 Aviator表达式引擎 构建的灵活、强大的规则引擎系统。该引擎专注于高并发、复杂的业务规则定义、组合和执行,适用于需要快速决策和弹性调度的场景。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages