一、背景

前段时间,在做项目重构的时候,遇到很多地方需要做很多的条件判断。当然可以用很多的if-else判断去解决,但是当时也不清楚怎么回事,就想玩点别的。于是乎,就去调研了规则引擎。

当然,市面上有很多成熟的规则引擎,功能很多,性能很好。但是,就是想玩点不一样的(大家做技术选型别这样,这个是反面教材)。最终一款URule的规则引擎吸引了我,主要还是采用浏览器可直接配置,不需要过多安装,可视化规则也做的不错。经过一系列调研,后面就把它接入了项目中,顺便记录下调研的结果。

二、介绍

规则引擎其实是一种组件,它可以嵌入到程序当中。将程序复杂的判断规则从业务代码中剥离出来,使得程序只需要关心自己的业务,而不需要去进行复杂的逻辑判断;简单的理解是规则接受一组输入的数据,通过预定好的规则配置,再输出一组结果。

当然,市面上有很多成熟的规则引擎,如:Drools、Aviator、EasyRules等等。但是URule,它可以运行在Windows、Linux、Unix等各种类型的操作系统之上,采用纯浏览器的编辑模式,不需要安装工具,直接在浏览器上编辑规则和测试规则。

当然这款规则引擎有开源和pro版本的区别,至于pro版是啥,懂的都懂,下面放个表格,了解下具体的区别

特性 PRO版 开源版
向导式决策集 有 有
脚本式决策集 有 有
决策树 有 有
决策流 有 有
决策表 有 有
交叉决策表 有 无
复杂评分卡 有 无
文件名、项目名重构 有 无
参数名、变量常量名重构 有 无
Excel决策表导入 有 无
规则集模版保存与加载 有 无
中文项目名和文件名支持 有 无
服务器推送知识包到客户端功能的支持 有 无
知识包优化与压缩的支持 有 无
客户端服务器模式下大知识包的推拉支持 有 无
规则集中执行组的支持 有 无
规则流中所有节点向导式条件与动作配置的支持 有 无
循环规则多循环单元支持 有 无
循环规则中无条件执行的支持 有 无
导入项目自动重命名功能 有 无
规则树构建优化 有 无
对象查找索引支持 有 无
规则树中短路计算的支持 有 无
规则条件冗余计算缓存支持 有 无
基于方案的批量场景测试功能 有 无
知识包调用监控 有 无
更为完善的文件读写权限控制 有 无
知识包版本控制 有 无
SpringBean及Java类的热部署 有 无
技术支持 有 无

三、安装使用

实际使用时,有四种使用URule Pro的方式,分别是嵌入式模式、本地模式、分布式计算模式以及独立服务模式。

但是我们这里不考虑URule Pro,咱自己整个开源版,在开源版集成springboot的基础上做一个二次开发,搜了一圈,其实就有解决方案。大致的项目模块如下:

[](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ab06491c96d04175ad1bbe934a3c1a1c~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?)

自己创建个空数据库,只需要在edas-rule-server服务中修改下数据库的配置,然后启动服务即可。第一次启动完成,数据库中会创建表。

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/urule-data?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=mysql
复制代码

上面说过,它是纯用浏览器进行编辑,配置规则的,只需要打开浏览器,输入地址:http://localhost:8090/urule/frame,看到这个界面,就说明启动成功了。

[](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ccd47bcaa9934f3d8bd2e5ff4ee8cddb~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?)

四、基础概念

3.1整体介绍

先说下URule它的构成部分,主要是两部分:1、设计器部分 2、规则执行引擎。设计器部分主要是库文件和规则文件构成。下面看下整体的结构图

[](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0bc85007846e4752b4d5ee2fa318920e~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?)