当前位置:首页 > 科技  > 软件

Drools规则引擎实战

来源: 责编: 时间:2023-10-18 17:59:30 272观看
导读Part 1 规则引擎规则引擎:全称为业务规则管理系统,英文名为BRMS。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或 开发者在需要时进行配置、管理。需要注

r9128资讯网——每日最新资讯28at.com

Part 1 规则引擎

规则引擎:全称为业务规则管理系统,英文名为BRMS。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或 开发者在需要时进行配置、管理。需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。r9128资讯网——每日最新资讯28at.com

java开源的规则引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最为广泛并且开源的是Droolsr9128资讯网——每日最新资讯28at.com

主要应用场景:对于一些存在比较复杂的业务规则并且业务规则会频繁变换的系统比较适合使用规则引擎,如下:r9128资讯网——每日最新资讯28at.com

风控决策系统-------风险贷款、风险评估r9128资讯网——每日最新资讯28at.com

反欺诈项目-----银行贷款、征信验证、反洗钱r9128资讯网——每日最新资讯28at.com

实时反欺诈平台-----手机支付、信用卡消费r9128资讯网——每日最新资讯28at.com

Drools规则引擎构成

drools规则引擎由以下几部分构成:r9128资讯网——每日最新资讯28at.com

  • Working Memory(工作内存)
  • Rules(规则库)
  • Inference Engine(推理引擎)

◆Pattern Match(匹配器)具体匹配那一个规则,由它来完成r9128资讯网——每日最新资讯28at.com

◆Agenda(议程)r9128资讯网——每日最新资讯28at.com

◆Execution Engine(执行引擎)r9128资讯网——每日最新资讯28at.com

Drools规则引擎概念

Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可,例如本案例中我们调用kieSession.insert(order)就是将order对象插入到了工作内存中。r9128资讯网——每日最新资讯28at.com

Fact:事实,是指在drools 规则应用当中,将一个普通的JavaBean插入到Working Memory后的对象就是Fact对象,例如本案例中的Order对象就属于Fact对象。Fact对象是我们的应用和规则引擎进行数据交互的桥梁或通道。r9128资讯网——每日最新资讯28at.com

Rules:规则库,我们在规则文件中定义的规则都会被加载到规则库中。r9128资讯网——每日最新资讯28at.com

Pattern Matcher:匹配器,将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入Agenda中。r9128资讯网——每日最新资讯28at.com

Agenda:议程,用于存放通过匹配器进行模式匹配后被激活的规则。r9128资讯网——每日最新资讯28at.com

Drools 基础语法

规则文件构成r9128资讯网——每日最新资讯28at.com

关键字r9128资讯网——每日最新资讯28at.com

描述r9128资讯网——每日最新资讯28at.com

package 包名r9128资讯网——每日最新资讯28at.com

只限于逻辑上的管理,同一个包名下的查询或者函数可以直接调用r9128资讯网——每日最新资讯28at.com

importr9128资讯网——每日最新资讯28at.com

用于导入类或者静态方法r9128资讯网——每日最新资讯28at.com

globalr9128资讯网——每日最新资讯28at.com

全局变量r9128资讯网——每日最新资讯28at.com

functionr9128资讯网——每日最新资讯28at.com

自定义函数r9128资讯网——每日最新资讯28at.com

queryr9128资讯网——每日最新资讯28at.com

查询r9128资讯网——每日最新资讯28at.com

rule endr9128资讯网——每日最新资讯28at.com

规则体r9128资讯网——每日最新资讯28at.com

一个规则通常包含三个部分:属性部分(attribute)、条件部分(LHS)和结果部分(RHS)r9128资讯网——每日最新资讯28at.com

语法结构体:r9128资讯网——每日最新资讯28at.com

rule "ruleName"    attributes    when        LHS    then        RHSend

rule:关键字,表示规则开始,参数为规则的唯一名称。r9128资讯网——每日最新资讯28at.com

attributes:规则属性,是rule与when之间的参数,为可选项。r9128资讯网——每日最新资讯28at.com

when:关键字,后面跟规则的条件部分。r9128资讯网——每日最新资讯28at.com

LHS(Left Hand Side):是规则的条件部分的通用名称。它由零个或多个条件元素组成。如果LHS为空,则它将被视为始终为true的条件元素。r9128资讯网——每日最新资讯28at.com

then:关键字,后面跟规则的结果部分。r9128资讯网——每日最新资讯28at.com

RHS(Right Hand Side):是规则的后果或行动部分的通用名称。r9128资讯网——每日最新资讯28at.com

end:关键字,表示一个规则结束。r9128资讯网——每日最新资讯28at.com

Part 2 规则比较操作符

符号r9128资讯网——每日最新资讯28at.com

说明r9128资讯网——每日最新资讯28at.com

>r9128资讯网——每日最新资讯28at.com

大于r9128资讯网——每日最新资讯28at.com

<r9128资讯网——每日最新资讯28at.com

小于r9128资讯网——每日最新资讯28at.com

>=r9128资讯网——每日最新资讯28at.com

大于等于r9128资讯网——每日最新资讯28at.com

<=r9128资讯网——每日最新资讯28at.com

小于等于r9128资讯网——每日最新资讯28at.com

==r9128资讯网——每日最新资讯28at.com

等于r9128资讯网——每日最新资讯28at.com

!=r9128资讯网——每日最新资讯28at.com

不等于r9128资讯网——每日最新资讯28at.com

containsr9128资讯网——每日最新资讯28at.com

检查一个Fact对象的某个属性值是否包含一个指定的对象值r9128资讯网——每日最新资讯28at.com

not containsr9128资讯网——每日最新资讯28at.com

检查一个Fact对象的某个属性值是否不包含一个指定的对象值r9128资讯网——每日最新资讯28at.com

memberOfr9128资讯网——每日最新资讯28at.com

判断一个Fact对象的某个属性是否在一个或多个集合中r9128资讯网——每日最新资讯28at.com

not memberOfr9128资讯网——每日最新资讯28at.com

判断一个Fact对象的某个属性是否不在一个或多个集合中r9128资讯网——每日最新资讯28at.com

matchesr9128资讯网——每日最新资讯28at.com

判断一个Fact对象的属性是否与提供的标准的Java正则表达式进行匹配r9128资讯网——每日最新资讯28at.com

not matchesr9128资讯网——每日最新资讯28at.com

判断一个Fact对象的属性是否不与提供的标准的Java正则表达式进行匹配r9128资讯网——每日最新资讯28at.com

Part 3 Drools 规则属性 attributes

Drools中提供的属性如下表(部分属性)r9128资讯网——每日最新资讯28at.com

属性名r9128资讯网——每日最新资讯28at.com

说明r9128资讯网——每日最新资讯28at.com

saliencer9128资讯网——每日最新资讯28at.com

指定规则执行优先级r9128资讯网——每日最新资讯28at.com

dialectr9128资讯网——每日最新资讯28at.com

指定规则使用的语言类型,取值为java和mvelr9128资讯网——每日最新资讯28at.com

enabledr9128资讯网——每日最新资讯28at.com

指定规则是否启用r9128资讯网——每日最新资讯28at.com

date-effectiver9128资讯网——每日最新资讯28at.com

指定规则生效时间r9128资讯网——每日最新资讯28at.com

date-expiresr9128资讯网——每日最新资讯28at.com

指定规则失效时间r9128资讯网——每日最新资讯28at.com

activation-groupr9128资讯网——每日最新资讯28at.com

激活分组,具有相同分组名称的规则只能有一个规则触发r9128资讯网——每日最新资讯28at.com

agenda-groupr9128资讯网——每日最新资讯28at.com

议程分组,只有获取焦点的组中的规则才有可能触发r9128资讯网——每日最新资讯28at.com

timerr9128资讯网——每日最新资讯28at.com

定时器,指定规则触发的时间r9128资讯网——每日最新资讯28at.com

auto-focusr9128资讯网——每日最新资讯28at.com

自动获取焦点,一般结合agenda-group一起使用r9128资讯网——每日最新资讯28at.com

no-loopr9128资讯网——每日最新资讯28at.com

防止死循环,防止自己更新规则再次触发r9128资讯网——每日最新资讯28at.com

lock-on-activer9128资讯网——每日最新资讯28at.com

no-loop增强版本。可防止别人更新规则再次出发r9128资讯网——每日最新资讯28at.com

Part 4 项目应用

省机顶盒软探针平台为实现机顶盒用户视频使用质量的实时监控,采用实时大数据进行准实时的指标统计,指标结果推送kafka,由平台新增的告警引擎实时消费kafka数据并通过预定制的专家规则实现实时的告警判定,最终告警结果实时通知反馈到告警平台,实现告警到告警恢复的生命周期。r9128资讯网——每日最新资讯28at.com

图片r9128资讯网——每日最新资讯28at.com

Part 5 规则示例

rule "播放成功率告警"no-loop truewhen    $fact:Fact()    eval($fact.getPlay() > 0.0)    eval($fact.getPlay() < MapUtils.getDoubleValue($fact, "playThreshold", 0.96))then    RuleResult fr = new RuleResult("播放成功率告警");    fr.setRuleCode(900001);    fr.setActualTime(MapUtils.getString($fact, "actualTime"));    fr.setAlarmTime(RuleUtil.getAlarmTime(MapUtils.getString($fact, "actualTime"), MapUtils.getString($fact, "900001")));    //说明当前是要告警的    fr.setAlarmStatus("1");    fr.setAlarmTitle("指标播放成功率异常");    fr.setLocateInfo("指标播放成功率异常");    fr.setAlarmText(RuleUtil.playAlarmText($fact, MapUtils.getDoubleValue($fact, "playThreshold", 0.96)));    insert(fr);endrule "播放成功率告警结束"no-loop truewhen    $fact:Fact()    eval($fact.getPlay() >= MapUtils.getDoubleValue($fact, "playThreshold", 0.96))    eval(MapUtils.getLongValue($fact, "900001") > 0)    eval(RuleUtil.checkAlarmTime($fact.getActualTime(), MapUtils.getLongValue($fact, "900001_time"), MapUtils.getLongValue($fact, "reThreshold", 900000)))then    RuleResult fr = new RuleResult("播放成功率告警恢复");    fr.setRuleCode(900001);    fr.setActualTime(MapUtils.getString($fact, "actualTime"));    fr.setAlarmTime(MapUtils.getString($fact, "900001"));    fr.setAlarmStatus("0");    fr.setMsg("告警恢复");    fr.setAlarmTitle("指标播放成功率异常");    fr.setLocateInfo("指标播放成功率异常");logger.info("播放告警恢复了{}", $fact);insert(fr);


r9128资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14022-0.htmlDrools规则引擎实战

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 增强现实改变营销的三种方式

下一篇: 彻底搞懂hashMap底层原理

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • Rust中的高吞吐量流处理

    Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • K8S | Service服务发现

    K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 三分钟白话RocketMQ系列—— 如何发送消息

    三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 中国家电海外掘金正当时|出海专题

    中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • Windows 11发布,微软一改往常对老机型开放的态度

    Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top