网站首页 > 精选教程 正文
之前介绍了很多商业化的规则引擎,如drools、OpenL Tablets。虽然功能强大,但是由于是国外项目,英文文档多少有点障碍。在网上找了一下,还真有个国产开源的项目——urule。他是上海锐道信息技术有限公司出品,这里免费给他打个广告,挂个pro版的链接:智能风控决策引擎-可视化Java规则引擎-上海锐道URule Pro。虽然开源版是一个阉割版,相比于urule-pro,有很多功能不能使用,但已经很不错了,我们可以根据开源项目定制开发。
URULE PRO版与开源版主要功能比较 | ||
特性 | URULE PRO版 | URULE开源版 |
向导式决策集 | 有 | 有 |
脚本式决策集 | 有 | 有 |
决策树 | 有 | 有 |
决策流 | 有 | 有 |
决策表 | 有 | 有 |
交叉决策表 | 有 | 无 |
复杂评分卡 | 有 | 无 |
文件名、项目名重构 | 有 | 无 |
参数名、变量常量名重构 | 有 | 无 |
Excel决策表导入 | 有 | 无 |
规则集模版保存与加载 | 有 | 无 |
中文项目名和文件名支持 | 有 | 无 |
服务器推送知识包到客户端功能的支持 | 有 | 无 |
知识包优化与压缩的支持 | 有 | 无 |
客户端服务器模式下大知识包的推拉支持 | 有 | 无 |
规则集中执行组的支持 | 有 | 无 |
规则流中所有节点向导式条件与动作配置的支持 | 有 | 无 |
循环规则多循环单元支持 | 有 | 无 |
循环规则中无条件执行的支持 | 有 | 无 |
导入项目自动重命名功能 | 有 | 无 |
规则树构建优化 | 有 | 无 |
对象查找索引支持 | 有 | 无 |
规则树中短路计算的支持 | 有 | 无 |
规则条件冗余计算缓存支持 | 有 | 无 |
基于方案的批量场景测试功能 | 有 | 无 |
知识包调用监控 | 有 | 无 |
更为完善的文件读写权限控制 | 有 | 无 |
知识包版本控制 | 有 | 无 |
SpringBean及Java类的热部署 | 有 | 无 |
技术支持 | 有 | 无 |
简单使用:
1、概念:
- 库:用来存储规则操作的实体及规则触发后的动作。包括:参数库,变量库,常量库,动作库。
- 决策集:用来设置一个规则的集合,有两种设置方式,向导方式、脚本方式。
- 决策表:以表格形式设置规则。
- 决策树:以树形结构(思维导图的方式)设置规则。
- 评分卡:根据触发的规则,计算得分。
- 决策流:通过绑定多个决策节点,以流的形式进行规则的复合处理。
- 知识包:是将规则进行打包,供客户端使用。
2、接下来做一个简单的事例:
首先我们创建一个新项目,edas。然后创建一个参数库,一个字段是年龄、一个字段是姓名。
这里我们也可以创建一个变量库,如果server端有相关自定义类,我们还可以通过解析自动生成字段。
然后我们开始在决策集里制定规则:
当姓名不为空并且年龄小于18,我们输出一个message,用户未成年。
最后,我们定义一个知识包,把规则加载发布。
客户端怎么使用呢?
在客户端,我们声明KnowledgeService的bean,调用getKnowledge获取知识包,创建一个KnowledgeSession,通过调用KnowledgeSession的fireRules,就可以使用server端创建的规则集了。
@RequestMapping("/ageRule")
public Result rule(@RequestParam String age,@RequestParam String name) throws IOException {
//创建一个KnowledgeSession对象
KnowledgeService knowledgeService = (KnowledgeService) Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);
KnowledgePackage knowledgePackage = knowledgeService.getKnowledge("edas/user_package");
KnowledgeSession session = KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);
Map<String, Object> param = new HashMap<>();
param.put("age", age);
param.put("name",name);
RuleExecutionResponse result = session.fireRules(param);
System.out.println("年龄:" + session.getParameter("age"));
System.out.println(session.getParameter("message"));
return new Result("0",session.getParameter("message").toString());
}
客户端比较简单,很容易接入咱们的业务系统中。这个开源项目操作容易,便于管理。已经完全满足我们项目中的需要了,很赞。开源代码还另外提供了springboot版本,但是springboot里没有太多代码,只是加载了server里注册的bean。页面交互层也仅仅用了servlet,也没有过多的分层。为了后续的定制开发,我后面会对他进行一系列的框架改造。
猜你喜欢
- 2024-11-07 Java表达式求值引擎Aviator(二) java数学表达式解析
- 2024-11-07 橙子引擎CEO尚韬:Home Internet开启,TV游戏迎来革命
- 2024-11-07 必须知道的几款优秀的工作流引擎 工作流引擎设计模式
- 2024-11-07 Java常用的规则引擎,让你变动的代码更加容易维护
- 2024-11-07 5款新游寻投资发行渠道合作(附相关联系方式)|GameRes
- 2024-11-07 「新手必看超全工具分享1」这些年,我收藏的超实用Java工具
- 2024-11-07 「推荐」Github上有哪些新手小白不错的java练手项目?
- 2024-11-07 Java规则引擎Drools:简介与实际编码案例
- 2024-11-07 干货分享——GitHub上快速提升Java技能的练手项目
- 2024-11-07 Java 和 C++ 怎么选? java和c++选哪个
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)