首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

规则引擎Drools在贷后催收业务应用

Drools 使用以下基本组件:rule(规则):用户定义业务规则,所有规则必须至少包含触发规则条件和规则规定操作。...当用户在 Drools 添加或更新规则相关信息,该信息会以一个或多个事实形式插入 Drools 引擎工作内存Drools 引擎将这些事实与存储在生产内存规则条件进行模式匹配。...当满足规则条件Drools 引擎会激活并在议程中注册规则,然后Drools 引擎会按照优先进行排序并准备执行。...对每个betaNode进行匹配,将左内存对象列表与右内存对象按照节点约束进行匹配,符合条件则将该事实对象与左部对象列表合并,并传递到下一节点。...然而当处理海量数据与规则,beta内存根据规则条件与事实数目而成指数增长, 所以当规则与事实很多时,会耗尽系统资源。

1.3K20

规则引擎之drools入门

我们开发人员不得不一直处理软件各种复杂问题,不仅需要将所有数据进行关联,还要尽可能快地一次性处理更多数据,甚至还需要以快速方式更新相关机制。 规则是什么?...一旦某组数据满足条件匹配,则会用匹配到数据执行某些特定动作。...when 满足什么样条件 then 最终结果 业务规则都是基于这种声明式编程范例,而条件只是作为过滤器,只要数据被引入到符合条件规则引擎,就可以确定需要执行规则或规则组。...每次将数据添加到规则引擎,它将在与此类似的树中进行求值,并到达一个动作节点,在该节点处,它们将被标记为准备执行特定规则数据。...当我们到达一个事实(Fact)与规则相匹配节点,规则评估会将规则操作与触发数据添加到一个叫作议程(Agenda)组件,如果同一个事实(Fact)与多个规则相匹配,就认为这些规则是冲突,议程(Agenda

3.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法

RHS语法 使用说明 RHS是满足LHS条件之后进行后续处理部分统称,该部分包含要执行操作列表信息。RHS主要用于处理结果,因此不建议在此部分再进行业务判断。...RHS主要功能是对working memory数据进行insert、update、delete或modify操作,Drools提供了相应内置方法来帮助实现这些功能。...(newSomething()); 调用insert之后,规则会进行重新匹配,如果没有设置no-loop为true或lock-on-active为true规则,如果条件满足则会重新执行。...根据优先首先执行insert操作规则,然后执行结果检测。...在调用setter方法,不必再写FACT对象引用,编译器会自动添加。

1.3K80

Drools三】打工人学习Drools高级语法

语法结构为:global 对象类型 对象名称 在使用global定义全局变量时有两点需要注意: 1、如果对象类型为包装类型,在一个规则改变了global值,那么只针对当前规则有效,对其他规则...LHS部分是介于when和then之间部分,主要用于模式匹配,只有匹配结果为true,才会触发RHS部分执行。...= null) 可能有人会有疑问,我们前面在LHS部分进行条件编写并没有使用exists也可以达到判断Working Memory是否存在某个符合条件Fact元素目的,那么我们使用exists还有什么意义...两者区别:当向Working Memory中加入多个满足条件Fact对象,使用了exists规则执行一次,不使用exists规则会执行多次。...); kieSession.fireAllRules(); 上面第一个规则只会执行一次,因为Working Memory存在两个满足条件Fact对象,第二个规则会执行两次。

2.4K10

jbpm5.1介绍(2)

表示定时器后,可以触发一个特定时间内一次或多次。计时器事件应该有一个传入连接和一个外向连接。计时器延迟指定计时器之前应等待多久引发一次。当计时器事件过程达到,它会启动相关定时器。...如果期间为0,定时器应只能触发一次。表达应形式[#][#H] [#M] [#S] [#[MS]。...这个文件列表,然后可以绑定以便在使用过程一个过程变量。工作项目完成后,该值将被复制。 9)流程 ? 表示从这个过程另一个进程调用。一个流程节点都应该有一个传入连接和一个传出连接。...多实例进程是一种特殊进程,允许你执行所包含过程多次分部,为每一个集合元素一次。多实例子进程应该有一个传入连接和一个传出连接。...如果它是从多个传入连接触发,它会触发这些触发下一个节点。

1.2K60

Drools(BRMS) 速成教程(上)

,此类需求,一般都是通过写if分支来实现,参考下面: if (规则条件1){ //处理1 } else if (规则条件2){ //处理2 } else if (规则条件3){ //...三、编写业务规则drl文件 drl 是drools rule缩写,大概长这个样子:(规则文件一般放在resources资源目录或下面的子目录),将下面的内容保存在hello.drl package...: 3.1 package部分 这个是用来管理包,跟javapackage概念类似,多个rule文件,可以按包来管理rule代码。..."say-goodbye" update($message); end rule "give-me-money" salience -1 //规则触发优先,值越大,...//hello2.drl规则"global-demo" 我会每隔1秒触发,10次后停止!1 //规则:loop循环10次 我会每隔1秒触发,10次后停止!2 我会每隔1秒触发,10次后停止!

1K20

Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group多FACT对象

场景 当我们使用activation-group,默认会执行优先最高一个规则,然后其他规则不再执行,这也是此属性基本特性。...在其他属性使用时,我们知道,如果插入多个对象,那么如果每个对象都符合同一规则条件就会执行多次,如果部分条件符合规则,就执行部分次。...当我们即想使用activation-group特性,又想实现上面的要求改如何去做呢? 实例解析 实例一 首先,我们来确认第一个问题,insert多个FACT对象,会触发几次规则。...实例二 那么,我们想达到上面说,如果插入多个对象,每个符合条件触发一次,同时一个activation-group组触发优先比较高。...test-activation-group2 被触发 discount= 10 第一次执行命中了1条规则! 像上面这样,每执行一次调用一次fireAllRules就达到了预期目的。

1.2K80

Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器

定时器 规则用基于 interval(间隔)和cron定时器(timer),替代了被标注过时duration 属性。...) 间隔定时器用int来定义,它遵循java.util.Timer对象使用方法。具有延迟和重复执行选择。其中第一个参数表示启动之后延迟多长时间执行,第二个参数表示每隔多久执行一次。...下面以一个模拟系统报警器来示例一下Timer使用。规则timer每隔一秒执行一次,当满足触发规则返回结果至ResultEvent对象,业务系统拿到报警信息,并打印。...很显然,定时器每隔一秒执行一次,当满足规则触发条件,将结果放入ResultEvent。 PS:完整demo下载请加QQ群,进入文件目录下载(包含其他更多场景demo)。...后语 你支持是我努力最大动力!社区建立离不开你支持。此系列课程正在持续更新,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。

1.2K90

jbpm5.1介绍(10)

Junit测试异常事件触发 下面的示例测试在程序触发异常事件流程,流程如下 测试程序 public void testTimerBoundaryEventInterrupting() throws...下面的示例测试在程序中加入固定规则,然后如果发现符合规则那么向下执行流程 流程界面如下 规则文件如下 package org.drools.bpmn2 import org.drools.runtime.process.ProcessContext...,基本操作同上 示例如果同上,不再贴出 Junit测试超时事件2 下面的示例测试在流程执行两次超时事件并且都触发对应事件执行 测试程序 public void testIntermediateCatchEventTimerCycle2...Loading process BPMN2-IntermediateCatchEventTimerCycle2.bpmn2 Timer triggered Timer triggered Junit测试条件触发事件执行...下面的示例测试在流程条件等于jack触发事件执行 流程如下 测试程序 public void testIntermediateCatchEventCondition() throws Exception

84350

规则引擎深度对比,LiteFlow vs Drools

两款框架异同点 Drools和LiteFlow都是优秀开源框架,都能把业务逻辑给剥离出来。并且拥有自己表达式语法。...来看下drl文件大体样子: drl文件 可以看到,Drools定义规则方式是一个规则一段,有明确when...then,表示当满足什么条件,做什么。...在触发规则时候,会自动判断该去执行哪一段rule,如果满足多个条件,是可以触发多个规则then。 LiteFlow编排表达式简单易懂,底层用EL表达式语言包装而成。...在LiteFlow脚本组件,Groovy也可以通过import 来引入java任何包来调用。 Drools,可以直接引用到fact对象。...这个在Drools里面虽然也可以做到,但是要麻烦多。 「结论」 基本都能满足和java数据交换需求,但是LiteFlow在场景上支持显然更加多一点。

2.9K40

Flink在用户行为分析应用(一)

最后返回state匹配步骤数和ck步骤数相加进行判定伪代码如下//获取状态state数据迭代器 //todo 这里只能get,不能上面传入迭代器,否则迭代一次,就不能迭代第二次了...A事件,后触发BC事件,使用SPM来描述往往非常复杂,业务方使用起来也不是很方便,此处提供一种基于正则表达式描述,具体转化如下:2.使用列表数据结构,装载业务方给定key,把源源不断给定用户事件映射为列表索引...,匹配规则触发&定时型规则设计方案理解FlinkWatermark概念在分布式环境下如何推进事件时间Flink定时器应用定时规则形如:触发A事件后4分钟内触发BCD事件,该场景比较比较复杂,目前设计可以满足对定时时间内事件行为连续序列判断...if (tp.f1 == timestamp){ //如果对应,检查该规则定时条件(定时条件包含就是行为条件列表) TimerCondition...,如何在不停止job前提下修改规则是一个重要需求,Drools可以将复杂多变规则从硬编码解放出来,以规则脚本形式存放在文件,使得规则变更不需要修正代码重启job可以立即上线Drools热更新流程

1.1K00

从零搭建精准运营系统

A行为前24小内未发生B行为 用户在A行为后一个月内未发生B行为 业务上有两种消息类型 日常消息:由业务人员通过条件筛选锁定用户群,定时或即时给批量用户发送消息或者优惠券 触达消息:主要由用户自身行为触发...,比如登陆、进件申请、还款等,满足一定筛选条件实时给用户发送消息或优惠券 对于用户筛选条件,也主要有两种类型 用户状态:包括用户自身属性如性别、年龄、学历、收入等,还有用户相关联实体如进件订单、账户信息...Drools Fusion Drools开始于规则引擎,后引入Drools Fusion模块提供CEP功能。 优势: 功能较为完善,具有如系统监控、操作平台等功能。...插件读取到kafka,数据源之一 report server:事件上报服务,数据源之一 tags:用户画像系统计算出来标签,数据源之一 触发场景路由:分实时触发和延迟触发,实时触发直接到下一步,延迟触发基于...系统只经过千万用户,日千万事件数据生产验证,再高数量级的话可能还有很多性能优化工作,如ES并行查询(目前用scroll api批量拉取用户数据是串行) 事件类数据越来越多,目前采取定时删除半年前数据方式

1.7K30

规则引擎-BRMS在企业开发应用

什么是规则 复杂企业项目的开发以及其中随外部条件不断变化业务规则(business logic),迫切需要分离商业决策者商业决策逻辑和应用开发者技术决策,并把这些商业决策放在中心数据库或其他统一地方...规则正是应用于上述动态环境一种解决方法。 ? 2. 规则产生背景 一个业务规则包含一组条件和在此条件下执行操作.它们表示业务规则应用程序一段业务逻辑。...业务规则理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。 企业为适应市场多变性,它业务逻辑也必然是多变。理想情况下,业务逻辑改变应该能够实时反映在企业信息系统。...免体检累积最高限额表在规则又是如何实现呢? ? 结合现实生活一个例子来看变化业务与IT“矛盾” 没有规则: ? 有了规则后: ?...不过由于DROOLS是一个开源免费规则组件,因此在面向企业商业应用时它还存在着以下一些问题需要解决: ?

5.3K81

当Ansible遇到BPM,将自动化运维智能化!

前言 本文仅代表作者们个人观点; 文中内容仅供技术探讨,不能作为生产环境技术指导。 本文书写过程, 一、构建业务规则必要性 什么是规则?...机动车单双号限行 极端天气预警 应急响应系统 不允许 root 账户远程登录 CPU 使用率 > 70% 增加一个服务实例 学生上课表 物流行业:货物跟踪,物流实时感知 智能交通:按照当前各路段车流量动态调整路口红绿灯时长...“设置一个或多个条件,当满足这些条件时会触发一个或多个操作。...使用BPM好处: 将业务规则从应用程序代码中分离出来 使用接近自然语言语义模块编写业务规则 把复杂商业规则通过分组、设置优先、是否允许重复触发等方式,最大限度避免规则冲突 规则触发与执行路径清晰可见...业内有很多BPM方案:IBM、Oracle都深谙此道。规则开源产品就 Drools 一家,流程开源产品 有jBPM 和 Activity。 红帽BPM基于Drools + jBPM。 ?

1.3K10

小明历险记:规则引擎Drools教程一

在规则引擎里面谈业务规则重点是谈当满足什么样条件时候,需要执行什么样操作。因此一个完整业务规则包括了条件触发操作两部分内容。...逻辑和数据分离 数据位于“域对象”,业务逻辑位于“规则”。根据项目的种类,这种分离是非常有利。 速度和可扩展性 写入DroolsRete OO算法已经是一个成熟算法。...当Rete算法进行事实断言,包含三个阶段:匹配、选择和执行,称做 match-select-act cycle。...no-loop 定义当前规则是否不允许多次循环执行,默认是 false,也就是当前规则只要满足条件,可以无限次执行。...salience 用来设置规则执行优先,salience 属性值是一个数字,数字越大执行优先越高, 同时它值可以是一个负数。默认情况下,规则 salience 默认值为 0。

1K30

Drools 规则引擎死循环问题解决

在《Drools7 规则引擎视频教程》已经讲到,使用modify或update时候在某种程度上会导致死循环。 昨天一同学在使用Drools规则引擎便遇到了该问题。...下面看该同学贴出来规则代码: ? 首先我们来分析一下上面的代码,上面的代码这位同学讲一个相同Map,传递进入两个规则,在规则then部分中会对map属性值进行更新。...lock-on-active true这个属性,可以限制当前规则只会被执行一次,包括当前规则重复执行不是本身触发。是no-loop加强版。...另外,针对这段代码编写,这位同学还犯了另外一个错误,就是When判断条件。两个规则中都用了两个判断条件。$map:Map()相当于一个判断条件;Map(…)又相当于一个判断条件。...其实这两个判断条件应该合并成一个,如这样形式:$map:Map(…)。大家在使用过程中注意不要犯类似的错误。 更多学习途径 更多关于Drools规则引擎视频教程和学习群组,访问此处。

1.2K20

flowable 流程引擎总结

捕获事件为当流程执行到达这个事件,会等待直到触发器动作。抛出事件当流程执行到达这个事件,会触发一个触发器。具体事件包括定时器事件、启动事件、结束事件、消息事件、信号事件、边界事件等丰富类型。...当流程执行到达用户任务,会为指派至该任务用户或组任务列表创建一个新任务。用户任务允许标识到期日期以及直接指派给用户。...在 V6.3.0 到 V6.4.1 版本,Flowable 使用名为 Drools Expert Drools 规则引擎执行业务规则。...阶段(Stage):阶段用于把一组元素聚合在一起,可以有进入和退出条件。阶段可以嵌套,一个阶段计划元素只有其父阶段激活才生效。 2....案例任务(Case task):案例可以嵌套,案例案例就是案例任务。 6. 流程任务(Process task):当流程任务阻塞,实例化计划要素会处于激活状态,直至流程任务完成。 7.

2.7K20

Drools7.0.0.Final规则引擎教程》番外实例篇——默认条件陷阱

当我们向session插入多个对象,如果这多个对象匹配到同一条规则,fireAllRules方法返回命中规则数就是插入对象数目。但是有一个情况比较特殊,下面看看实例。...this is a multi-line comment in the right hand side of a rule */ end 如果你看到上面的代码,先别执行,猜测一下会打印日志触发规则条数是多少...因为Drools在处理默认条件时候,也就是说when里面不写任何条件进行匹配,所有的对象对它来说都是没有区别的,没有可筛选区分,因此就当做一条规则来处理触发了。...当在规则when添加一个约束定义,比如: $obj:Object() 此时就会像正常情况下一样触发规则。因此,我们在使用默认条件要特别留意此处,但大多数情况下我们都是会写条件约束。...目前国内第一套关于Drools(7)入门教程《Drools 7 规则引擎入门教程》正在火热录制,其他更多关于Drools系列教程也在筹划,希望大家多多支持。

1.2K70

规则引擎droolsrete算法实现原理和事实匹配过程

Drools是一款基于Java开源规则引擎,实现了将业务决策从应用程序中分离出来。...本文是作为一个技术角度进行编写,文采有限,仅供对drools有一定了解,并且想搞清楚drools内部实现原理,并想提升编程技巧同行学习和指正。...; (3)、OjectTypeNode对象sink属性引用着这个fact事实规则网络; (4)、从sink属性链表拿出一个alphaNode进行匹配,递归遍历所有alphaNode节点(sink...===>向下(当前AlphaNode节点代表规则所有条件模式)匹配,如果所有的节点alphaNode隐藏条件都符合, 则完全匹配一条规则,形成议程加入冲突集合,待匹配完所有的规则,再根据规则优先执行匹配上规则结果部分...===>向右(进行另一个规则匹配),如果所有的节点alphaNode隐藏条件都符合,则完全匹配一条规则,形成议程加入冲突集合,待匹配完所有的规则,再根据规则优先执行匹配上规则结果部分,更改

9K31
领券