您好,欢迎访问三七文档
规则引擎1.背景2.规则引擎3.规则引擎的算法4.常见的几个规则引擎产品5.JbossDrools规则引擎的介绍1.背景一个业务规则包含一组条件和在此条件下执行的操作.它们表示业务规则应用程序的一段业务逻辑。业务规则的理论基础是:设置一个或多个条件,当满足这些条件时会触发一个或多个操作。1.背景企业为适应市场的多变性,它的业务逻辑也必然是多变的。理想情况下,业务逻辑的改变应该能够实时的反映在企业信息系统中。但是,传统的方法往往会使这种反映出现滞后,进而可能使企业错过市场机遇。企业管理者对企业级IT系统开发的要求为提高效率,管理流程必须自动化,即使现代商业规则异常复杂市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新为了快速、低成本的更新,业务人员应能直接管理IT系统中的规则,不需要程序开发人员参与项目开发人员的问题有些复杂的商业规则很难推导出算法和抽象出数据模型软件工程要求从需求-设计-编码,然而业务规则常常在需求阶段可能还没有明确,在设计和编码后还在变化,业务规则往往嵌在系统各处代码中对程序员来说,系统已经维护、更新困难,更不可能让业务人员来管理1.传统上的方式(1)通过修改系统的代码来改变业务逻辑•任务繁重•修改周期长•增加系统的不稳定性(2)在企业信息系统中使用大量的配置文件或配置参数,是系统具有一定的灵活性。•这种方法很难达到灵活修改业务逻辑的目的外部条件不断改变的业务规则商业决策逻辑技术决策技术决策商业决策逻辑放在中心数据库或其它地方基于规则的专家系统的出现给开发人员以解决问题的契机。规则引擎由基于规则的专家系统中的推理引擎发展而来2.规则引擎•规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据规则做出业务决策。11客户端包含业务规则的业务逻辑组件业务规则调用传统业务逻辑编写方式客户端业务逻辑组件调用引入规则引擎后业务逻辑组件的编写方式调用规则引擎业务规则引入规则引擎之前引入规则引擎之后引入规则引擎后带来的好处:-实现业务逻辑与业务规则的分离,实现业务规则的集中管理-可以动态修改业务规则,从而快速响应需求变更-使业务分析人员也可以参与编辑、维护系统的业务规则-使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得的简单规则引擎的使用方式规则引擎的程序接口至少包含以下几种API加载和卸载规则集的API数据操作的API引擎执行的API由于规则引擎是软件组件,所以只有开发人员才能够通过程序接口的方式来使用和控制它规则引擎的使用方式开发人员在程序中使用规则引擎基本遵循以下5个典型的步骤创建规则引擎对象向引擎中加载规则集或更换规则集向引擎提交需要被规则集处理的数据对象集合命令引擎执行导出引擎执行结果,从引擎中撤出处理过的数据使用了规则引擎之后,许多涉及业务逻辑的程序代码基本被这五个典型步骤所取代特点•规则引擎架构•规则引擎的推理RuleenginecoreRulesmanagementInferenceengineExecutioncontextAgendaWorkingmemoryRulesrepositoryRuleEngineAPIsRulesauthoringenvironmentRuleseditorTestDebugtoolsUserInterfaceExternalcomponentExternalcomponent规则引擎的推理a•将初始数据(fact)输入至工作内存(WorkingMemory)b•使用PatternMatcher将规则库(Rulesrepository)中的规则(rule)和数据(fact)比较c•如果执行规则存在冲突(conflict),即同时激活了多个规则,将冲突的规则放入冲突集合d•解决冲突,将激活的规则按顺序放入Agendae•执行Agenda中的规则。重复步骤b至e,直到执行完毕Agenda中的所有规则3.规则引擎的算法大部分规则引擎产品的算法,基本上都来自于RETE算法及其变体,Rete算法是目前效率最高的一个Forward-Chaining推理算法。•RETE算法可以分为两部分:–规则编译(rulecompilation)–运行时执行(runtimeexecution)它的核心思想是将分离的匹配项根据内容动态的构造匹配树,以达到显著降低计算量的效果4.常见的几个规则引擎产品•IBMWebSphereILOGJrules•JBossDools•JESS215.Drools规则引擎介绍•Drools是Jboss公司旗下一款开源的规则引擎,它完整的实现了Rete算法;提供了强大的EclipsePlugin开发支持;通过使用其中的DSL(DomainSpecificLanguage),可以实现用自然语言方式来描述业务规则,使得业务分析人员也可以看懂业务规则代码。23信用卡申请实例1.用户填写申请的个人信息。2.然后提交到系统进行初审。初审的职责是通过已有的规则对用户信息合法性和真实性进行检查。3.对于合法的用户提交到信用卡发放部门,使用规则来决定要发放的信用卡额度等信息。4.通知申请人申请结果信息录入申请流程图使用规则进行合法性检查通过规则发放信用卡信息提交通知申请人申请结果24用户需要输入的个人信息•用户需要输入的信息包括:姓名、性别、年龄、学历、电话、所在公司、职位、月收入、是否有房、是否有车、是否有信用卡等。点击“申请”按钮将申请信息提交到后台,后台启动审批流程,通过规则先对信息的合法性进行验证,对于验证合格申请系统将调用相关规则发放相关的信用卡。25用户信息合法性检查规则规则编号名称描述1检查学历与薪水1如果申请人既没房也没车,同时学历为大专及以下,并且月薪少于5000,那么不通过。2检查学历与薪水2如果申请人既没房也没车,同时学历为大专或本科,并且月薪少于3000,那么不通过。3检查学历与薪水3如果申请人既没房也没车,同时学历为本科以上,并且月薪少于2000,同时之前没有信用卡的,那么不通过。4检查申请人已有的信用卡数量如果申请人现有的信用卡数量大于10,那么不通过。申请人信息提交到系统后,首先调用这些规则进行验证,只有这些规则全部通过,才能进入发放信用卡的流程,否则申请结果就是不通过。26合法用户的信用卡发放规则规则编号名称描述1规则1如果申请人有房有车,或者月收入在20000以上,那么发放的信用卡信用额度为15000。2规则2如果申请人没房没车,但月收入在10000~20000之间,那么发放的信用卡信用额度为60003规则3如果申请人没房没车,月收入在10000以下,那么发放的信用额度为3000。4规则4如果申请人有房没车或者是没房但有车,月收入在10000以下,那么发放的信用额度为5000。5规则5如果申请人有房没车或者是没房但有车,月收入在10000~2000之间,那么发放的信用额度为8000。以上5条规则为验证通过的用户发放信用卡时使用,主要是用来决定信用卡的发放额度27Drools实现信用卡申请规则•采用Drools规则引擎来计算复杂的信用卡审批与发放规则•通过Drools提供的BRMS——Guvnor实现规则的管理与动态更新•通过Drools提供的RuleFlow(规则流)实现对信用卡审批规则的编排与执行Dorado表现层接收用户输入信用卡申请信息DatasetServer端Client端控件绑定用户业务逻辑层业务逻辑Drools规则引擎Drools的BRMS-Guvnor信用卡审批规则流信用卡审批规则系统架构28Drools实现的信用卡自动审批流程•“检查申请人信息是否合法”:用来存放检查申请人信息是否合法的四条规则,对申请人信息进行合法性检查。•“判断是否合法”:判断当前申请人信息是否合法,如果合法那么将选择“合法”线路,否则选择“非法”线路。•“合法申请人信用卡发放”:存放发放信用卡的五条规则,对申请人的信息进行检查,从而为申请人提供合适的信用卡额度。•两个结束节点分别用来结束合法与非法的信用卡申请信息。存放检查申请人信息是否合法的四条规则判断当前申请人申请信息是否合法来决定要走的线路存放发放信用卡的五条规则利用Drools提供的RuleFlow设计的信用卡审批流程,该流程的主要作用是用来对信用卡的合法性检查规则及信用卡发放规则的执行顺序进行编排。29Drools实现的用户信息合法性检查规则•点击查看用户信息合法性检查规则的完整源文件/**如果申请人既没房也没车,同时学历为大专及以下,并且月薪少于5000,那么不通过。*/rule检查学历与薪水1ruleflow-groupapplychecklock-on-activetruesalience1whenCurrentuser-degreeis1-hascarisfalse-hashouseisfalse-salaryislessthen5000thenSocurrentuserapplyisinvalidend/**如果申请人既没房也没车,同时学历为大专或本科,并且月薪少于3000,那么不通过。*/rule检查学历与薪水2ruleflow-groupapplychecklock-on-activetruesalience2whenCurrentuser-hascarisfalse-hashouseisfalse-salaryislessthen3000-currentuserdegreeis2or3thenSocurrentuserapplyisinvalidEnd……30Drools实现的合法用户的信用卡发放规则点击查看信用发放规则完整源文件•/**•如果申请人有房有车,那么发放的信用卡信用额度为15000。•*/•rule规则1•salience1•ruleflow-groupcreditcardpayment•lock-on-activetrue•when•Currentuser•-hascaristrue•-hashouseistrue•then•Paymentcreditcardandcreditlimitis15000•end•/**•月收入在20000以上,那么发放的信用卡信用额度为15000。•*/•rule规则2•salience2•ruleflow-groupcreditcardpayment•lock-on-activetrue•when•Currentuser•-salaryisgreatethen20000•then•Paymentcreditcardandcreditlimitis15000•End•……31将相关规则文件部署到Guvnor申请人信息合法性检查规则在Guvnor里查看的效果在Guvnor里查看信用卡审批的规则流程图可以将编写好的信用卡申请规则及编排规则执行的规则流文件一起发布到Guvnor,通过Guvnor可以实现对规则的管理与动态编译,以快速的响应业务变化需求。通过使用Guvnor提供的Eclipse-plugin可以将规则文件直接部署到Guvnor当中。32编写客户端测试信用卡申请规则•为了可以更加真实的反映Drools的使用方法,我们用一个B/S架构的应用来作为规则调用的客户端。•Drools的客户端采用Dorado实现,通过Dorado客户端提供申请人申请信息,再这些信息交给Drools进行合法性检查,对于合法的申请再进行信用卡的发放,最将结果返回给Dorado。Dorado客户端调用规则引擎进行信用卡申请Dorado客户端Drools规则引擎信用卡申请规则提供信用卡申请信息返回申请结果
本文标题:专题讲座-规则引擎
链接地址:https://www.777doc.com/doc-2790750 .html