规则引擎

drools 决策引擎介绍、开发

廉价感情. 提交于 2019-12-04 11:15:17
1. 背景介绍 1.1 何为规则引擎 很多企业的IT业务系统中,经常会有大量的业务规则配置,而且随着企业管理者的决策变化,这些业务规则也会随之发生更改,为了适应这样的需求,IT业务系统应该能够快速且低成本的更新,通常做法是将业务规则的配置单独拿出来,使之与业务系统保持低耦合,实现这样功能的程序,叫做规则引擎。 接受数据输入,解释业务规则,并根据业务规则作出业务决策,从而实现了将业务决策从应用程序中分离出来。 1.2 一个实际的例子 银行贷款业务中,每种贷款类型都有不同的业务规则,并且这些规则也可能会根据实际应用情况进行调整,如觉得网贷产品类型有如下判定规则: 如果公积金缴存基数大于6000则进入白领贷 如果公积金缴存基数小于6000但单位性质是国家机关/事业单位也进入白领贷 如果公积金缴存基数小于6000且单位性质为非国家机关/事业单位则进入市民易贷 如果公积金缴存基数小于6000并且单位性质缺失则进入公积金贷 如果在代码中处理这类业务逻辑,会有很多的IF/ELSE,并且如果规则发生变化,还需要重新编写代码、编译、部署才能上线。 而通过规则引擎,可以方便的将这类业务强相关的逻辑放到规则引擎中执行 1.3 规则引擎的优点 对系统的使用人员 l 把业务策略(规则)的创建、修改和维护的权利交给业务经理 l 提高业务灵活性 l 加强业务处理的透明度,业务规则可以被管理 l

疯狂Activiti6.0连载(13)DMN的XML规范

旧城冷巷雨未停 提交于 2019-12-03 02:42:18
本文节选自《疯狂工作流讲义(第2版)》 京东购买地址: https://item.jd.com/12246565.html 疯狂Activiti电子书: https://my.oschina.net/JavaLaw/blog/1570397 工作流Activiti教学视频: https://my.oschina.net/JavaLaw/blog/1577577 DMN的XML规范 DMN规范的官方网址为: http://www.omg.org/spec/DMN/ ,在官方网站上可以获取到DMN的规范文档、DMN的XML Schema文档和样例文档。笔者已经将以上三份文档下载,并保存到代码目录,以下为这三份文档的代码路径: 规范文档:codes\15\15.2\DMN规范.pdf XML Schema:codes\15\15.2\dmn.xsd 样例文档:codes\15\15.2\example.xml 决策 在DMN规范中,根节点为definitions,该节点下可以出现import、itemDefinition、drgElement等元素,其中drgElement是一个抽象元素,decision元素继承于drgElement。一个decision表示一次决策,可以为它设置name、id、label属性,按照DMN规范,name属性是必需的,而其他属性则是可选的

Drools规则引擎入门指南(二)

匿名 (未验证) 提交于 2019-12-02 23:03:14
本篇博客主要讲解Drools常用的属性以及函数 首先我们在resources\rules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTests salience 属性的值默认为0,它的值越大执行的优先级就越高,看如下代码在执行的时候就会先执行salience2 123456789101112131415 rule "salience2"salience 2 when eval(true) then System.err.println("salience2");endrule "salience1"salience 1 when eval(true) then System.err.println("salience1");end 1234 @Test public void testSalience() { kieSession.fireAllRules(); } 当系统时间小于等于date-effective的值是才会执行。 12345678910111213 rule "dateEffective"date-effective "2018-11-24" when then System.err.println("2018-11-24被执行");endrule "dateEffectiveTomorrow"date

疯狂Activiti6.0连载(12)DMN规范概述

a 夏天 提交于 2019-12-01 18:16:09
本文节选自《疯狂工作流讲义(第2版)》 京东购买地址: https://item.jd.com/12246565.html 疯狂Activiti电子书: https://my.oschina.net/JavaLaw/blog/1570397 工作流Activiti教学视频: https://my.oschina.net/JavaLaw/blog/1577577 DMN规范概述 在第14章,我们讲解了Activiti与规则引擎的整合使用,确切来说,是Activiti与Drools规则引擎的整合。在Activiti6版本发布后,Activiti开始实现DMN规范,换言之,Activiti正在实现自己的规则引擎,虽然尚未完成,但已具雏形。本章将讲述DMN规范以及初步实现的Activit规则引擎。 笔者成书时,Activiti的规则引擎并没有正式发布,官方文档、API中没有找到相关的资料,本章内容为笔者参考Activiti规则引擎模块的源代码编写而成,在以后的Activiti版本中,规则引擎的实现及发布的文档,有可能与本书所描述的内容有所冲突,望读者了解该情况。 DMN的出现背景 DMN是英文Decision Model and Notation的缩写,直译意为决策模型与图形。根据前章节可知,BPMN是OMG公司发布的工作流规范,而DMN同样是OMG公司发布规范

基于Groovy实现Spring Bean的动态加载

元气小坏坏 提交于 2019-11-30 03:54:04
Spring对Groovy有着良好的支持,能把Groovy实现类作为Bean来使用,在前一篇Blog《Spring对Groovy Bean的支持》有详细的描述 http://my.oschina.net/joshuazhan/blog/137940 。基于Groovy Bean可以实现Bean的动态修改,但还有一个缺陷,即无法动态的加载/卸载Bean,本文基于Spring ApplicationContext的层级关系(Hierarchy )提供一个实现动态类加载的思路。 1. Spring ApplicationContext的层级关系 在ApplicationContext抽象类AbstractApplicationContext中,Spring引入了Context(后文将ApplicationContext简称为Context)的层级关系,通过ApplicationContext的构造函数,即可设置其父Context。 /** * Create a new AbstractApplicationContext with the given parent context. * @param parent the parent context */ public AbstractApplicationContext(ApplicationContext parent) {

EMQ X 规则引擎系列(一):数据桥接到消息队列(Kafka)

时光总嘲笑我的痴心妄想 提交于 2019-11-28 08:05:18
EMQ X 3.2 版本引入了 “规则引擎” 功能,支持在 EMQ X Broker 筛选终端上报的数据,处理后流至后端数据库或其他的消息队列。本篇以具体场景来说明 “如何使用规则引擎将消息转发至 Kafka” 场景介绍 该场景需要将 EMQ X 指定主题下且满足条件的消息桥接到 Kafka 。为了便于后续分析检索,消息内容需要进行拆分。 该场景下设备端上报信息如下: 上报主题:cmd/state/:id,主题中 id 代表车辆客户端识别码 消息体: { "id": "NXP-058659730253-963945118132721-22", // 客户端识别码 "speed": 32.12, // 车辆速度 "direction": 198.33212, // 行驶方向 "tachometer": 3211, // 发动机转速,数值大于 8000 时才需存储 "dynamical": 8.93, // 瞬时油耗 "location": { // GPS 经纬度数据 "lng": 116.296011, "lat": 40.005091 }, "ts": 1563268202 // 上报时间 } 当上报数据发动机转速数值大于 8000 时,存储当前信息以便后续分析用户车辆使用情况。 准备工作 创建Kafka主题 ./bin/kafka-topics.sh --create -