规则引擎的实现方法及装置与流程

文档序号:11199042阅读:1223来源:国知局
规则引擎的实现方法及装置与流程

本发明涉及计算机及互联网技术领域,特别是涉及一种规则引擎的实现方法及装置。



背景技术:

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。规则引擎的工作流程可以理解为:首先接受数据输入,然后解释业务规则,最后根据业务规则做出业务决策。

对于业务系统而言,复杂及多变的业务规则,如果没有规则引擎的支撑,很难做到业务代码的解耦,无法及时响应业务的变化。现有的规则引擎,如开源的drools(jbossrules,一种易于访问企业策略、易于调整以及易于管理的开源业务规则引擎),配置是基于xml(extensiblemarkuplanguage,可扩展标记语言)和特有的drl文件(扩展名为drl.的文件)实现,drools规则配置的可视化编辑程度不高,主要靠后台开发人员维护,所以可视化开发及维护成本较高。



技术实现要素:

为了简化规则引擎的开发,本发明实施例提供一种规则引擎的实现方法及装置。

根据本发明的一个方面,提供一种规则引擎的实现方法,包括:接收输入数据;将所述输入数据在所述规则引擎的规则集中匹配,其中,所述规则集包括多条规则,且所述规则是基于json格式配置的规则;对于所述规则,如果所述输入数据中包括规则对应的关键属性,则根据所述关键属性对所述输入数据进行规则校验,并根据所述规则对所述输入数据进行更新操作,如果所述输入数据中不包括所述关键属性,则从所述输入数据中提取出对象,利用java反射机制,获取到所述对象对应的属性值,并根据所述对象及属性值对所述输入数据进行规则校验,并根据规则对所述输入数据进行更新操作。

可选的,所述规则包括条件对象和执行对象,所述方法还包括:基于json格式,配置所述条件对象和执行对象;其中,所述条件对象包括字段项参数、操作项目参数和取值项参数组成的json数组,所述执行对象包括字段项参数和设置值项参数组成的json数组。

可选的,所述根据所述关键属性对所述输入数据进行规则校验包括:按照规则优先级获取到优先级最高的规则;针对当前获取的规则,根据所述规则中条件对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析所述输入数据,提取出所述关键属性格式对应的关键属性;如果输入数据的关键属性对应的取值与所述条件对象中的关键属性取值一致,则确定为规则校验通过。

可选的,所述根据所述规则对所述输入数据进行更新操作包括:根据所述规则中执行对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析所述输入数据,提取出所述关键属性格式对应的关键属性;根据所述执行条件对象中的关键属性取值更新所述输入数据的关键属性的取值。

可选的,如果所述输入数据中不包括所述关键属性,所述从所述输入数据中提取出对象、利用java反射机制获取到所述对象对应的属性值包括:解析所述字段项参数为对象/属性的格式,并从所述输入数据中获取到对象;利用java反射机制,从所述输入数据中提取出所述对象,并利用该对象的get/set方法得到该对象的属性值。

可选的,所述规则是以分布式结构缓存的。

根据本发明的另一个方面,提供一种规则引擎的实现装置,包括:输入数据接收单元,用于接收输入数据;规则匹配单元,用于将所述输入数据在所述规则引擎的规则集中匹配,其中,所述规则集包括多条规则,且所述规则是基于json格式配置的规则;规则校验及执行单元,用于对于所述规则,如果所述输入数据中包括规则对应的关键属性,则根据所述关键属性对所述输入数据进行规则校验,并根据所述规则对所述输入数据进行更新操作,如果所述输入数据中不包括所述关键属性,则从所述输入数据中提取出对象,利用java反射机制,获取到所述对象对应的属性值,并根据所述对象及属性值对所述输入数据进行规则校验,并根据规则对所述输入数据进行更新操作。

可选的,所述规则包括条件对象和执行对象,所述装置还包括:对象配置单元,用于基于json格式,配置所述条件对象和执行对象;其中,所述条件对象包括字段项参数、操作项目参数和取值项参数组成的json数组,所述执行对象包括字段项参数和设置值项参数组成的json数组。

可选的,所述规则校验及执行单元包括:规则校验子单元,用于按照规则优先级获取到优先级最高的规则;针对当前获取的规则,根据所述规则中条件对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析所述输入数据,提取出所述关键属性格式对应的关键属性;如果输入数据的关键属性对应的取值与所述条件对象中的关键属性取值一致,则确定为规则校验通过。

可选的,所述规则校验及执行单元包括:规则执行子单元,用于根据所述规则中执行对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析所述输入数据,提取出所述关键属性格式对应的关键属性;根据所述执行条件对象中的关键属性取值更新所述输入数据的关键属性的取值。

可选的,如果所述输入数据中不包括所述关键属性,所述规则校验及执行单元包括:反射处理子单元,用于解析所述字段项参数为对象/属性的格式,并从所述输入数据中获取到对象;利用java反射机制,从所述输入数据中提取出所述对象,并利用该对象的get/set方法得到该对象的属性值。

优选的,所述规则是以分布式结构缓存的。

可见,本发明规则引擎是基于json和反射机制实现,基于json的rule规则配置,为规则引擎的前端可视化开发提供了便利,使得该规则引擎配置起来更加方便清晰;在rule的配置上清晰明了,在实现上简单高效。采用轻量级的数据交换语言json和java反射机制,能够通过动态的配置快速响应频繁变动的业务规则调整,减少开发和运维成本,提高系统灵活性;采用分布式结构缓存规则,降低解析规则造成的资源消耗,提高规则引擎运行效率。该规则引擎实现方案对于视频、图文等相关业务的审核策略提供了快速的响应,可极大减轻审核的工作量,节省审核人力成本和开发成本。

附图说明

图1是本发明一个实施例提供的一种规则引擎的实现方法流程图;

图2是本发明另一个实施例提供的一种规则引擎中规则引擎类图示意图;

图3是本发明另一个实施例提供的一种规则引擎的实现方法流程图;

图4是本发明一个实施例提供的一种规则引擎的实现装置结构示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参见图1,为本发明实施例提供的一种规则引擎的实现方法流程图,该方法包括:

s101:接收输入数据;

s102:将输入数据在规则引擎的规则集中匹配,其中,规则集包括多条规则,且规则是基于json格式配置的规则;

s103:判断输入数据中是否包括规则对应的关键属性,如果包括执行步骤s104,如果不包括,执行步骤s105;

s104:根据关键属性对输入数据进行规则校验,并根据规则对输入数据进行更新操作;

s105:从输入数据中提取出对象,利用java反射机制,获取到对象对应的属性值,并根据对象及属性值对输入数据进行规则校验,并根据规则对输入数据进行更新操作。

可见,本发明基于审核系统频繁变更业务逻辑的场景,提出一种快速高效的实现方式,采用轻量级的数据交换语言json(javascriptobjectnotation,js对象标记)和java反射机制,方便在现有系统中整合和可视化的开发,易于开发人员和业务人员共同维护和使用。上述也提到,本发明的所有规则配置是基于json技术的,json是javascript的原生格式,这意味着在javascript中处理json数据不需要任何特殊的api或工具包,所以会简化前端开发。

在一个可选实现方式中,输入数据是指map(string,object)类型的数据,该数据格式灵活支持各类型数据,其内部可以再存放任意类型的数据,由此提高方案的灵活性。

本领域技术人员了解,规则引擎中执行的最小单元为规则集(ruleset),一个规则集是由多条规则(rule)组成的。一条rule是由一个条件对象(condition)和多个执行对象(action)组成。

在一个可选方式中,以memcached分布式结构存储规则,由此可提高规则引擎的执行效率。

在一个可选实现方式中,规则包括条件对象和执行对象,因此对规则的配置具体包括:基于json格式,配置条件对象和执行对象;其中,条件对象包括字段项参数、操作项目参数和取值项参数组成的json数组,执行对象包括字段项参数和设置值项参数组成的json数组。

在一个可选方式中,根据所述关键属性对输入数据进行规则校验包括:按照规则优先级获取到优先级最高的规则;针对当前获取的规则,根据规则中条件对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析输入数据,提取出关键属性格式对应的关键属性;如果输入数据的关键属性对应的取值与条件对象中的关键属性取值一致,则确定为规则校验通过。

在一个可选方式中,根据规则对输入数据进行更新操作包括:根据规则中执行对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析输入数据,提取出关键属性格式对应的关键属性;根据执行条件对象中的关键属性取值更新输入数据的关键属性的取值。

在一个可选方式中,如果输入数据中不包括规则对应的关键属性,采用反射机制进行处理的具体步骤包括:解析字段项参数为对象/属性的格式,并从输入数据中获取到对象;利用java反射机制,从输入数据中提取出所述对象,并利用该对象的get/set方法得到该对象的属性值。

可见,在本发明提出的规则引擎新的实现方案中,基于json和反射技术,且可选的基于目前较为流行的spring框架,能够快速在现有业务系统中整合并实现。对于业务规则频繁变化并且需要及时生效的场景,例如,审核系统中需要动态的根据运营策略来调整机审相关策略(包括任务优先级策略、机审结果策略、任务流程策略等),该规则引擎都能够高效的应对,具体的,利用该规则引擎灵活的输入和输出,能够满足大多数业务场景的需求,并利用缓存技术和java反射技术,能够高效的执行规则,实现高效处理。同时,简单易于理解的可视化的配置,也方便了开发人员和非开发人员共同使用。

下面结合图2-3,对本发明另一个实施例进行介绍。

规则引擎的实现过程主要包括以下三个步骤:

1.准备输入数据。本发明实施例可选方式中,输入数据格式为map(string,object)类型,该数据格式灵活支持各类型数据。总的输入定义为map格式,因为此格式具有很大的灵活性,其内部可以再存放任意类型的数据。

2.校验rule,根据输入数据获取规则所需的value,判断是否满足条件。

3.执行action,如果满足规则则执行action指定的特定行为,返回结果,否则直接跳过。

下面从规则引擎的总体设计、条件对象和执行对象的设置、条件对象和执行对象的执行流程,对本发明实施例进行介绍。

规则引擎中执行的最小单元为规则集ruleset,一个规则集是由多条规则rule组成的。一条rule是由一个condition条件对象和多个action执行对象组成。规则集的执行实现两种策略,一种是满足则跳出,另一种是执行到底。另外,规则集中的规则支持按优先级排序。

规则引擎还增加了memcached分布式缓存,可大大提高规则引擎的执行效率。参见图2,为规则引擎类图示意图。图2中,规则引擎包括多个ruleset,每个ruleset包括多条rule,一条rule是由一个condition条件对象和多个action执行对象组成,其中,一个condition由conditionitem和conditiongroup组成,ruleinputoutput用来配置conditon中的field对应的参数类型,方便反射时应用。

参考图3,为本实施例中规则引擎的实现过程流程图。

图3包括步骤:

s301:接收输入数据;

s302:执行规则集ruleset;

s303:按照rule优先级,选取一条rule并校验;

s304:执行conditon判定:从输入数据中获取到对象的实际值与配置值做比较,如果匹配则执行s305,否则返回执行s303;

s305:执行action:根据action配置更新属性;

s306:判断规则集类型,如果为满足则跳出,则转到s306;如果为执行到底,则转s303;

s307:结束并输出结果。

如前已述,本发明基于json对conditon和action进行配置,json是一种完全独立于语言的文本格式,简化了数据的访问,便于前端开发。

例如,conditon的格式如表1所示。

表1

conditon中groups属性对应的是conditiongroup数组,里面可以继续包含conditiongroup或conditonitem。

conditonitem格式示例如表2。

表2

action则是由下面的item组成的json数组,[{item0},...,{itemn}]。

item格式示例如表3所示。

表3

在进行conditon和action的配置之后,即完成了rule的配置,后续在对输入数据进行匹配时,按照conditon和action的配置进行匹配。

规则输入数据为map(string,object)格式,根据配置中的field属性,将其作为key去map中检索。

例如,field属性即上面conditionitem中定义的field,即业务规则配置中的某个条件key(关键属性),例如,用户id(用户标识),例如完整的一条规则可能是这样的:“用户id=1则视频审核结果为通过”。那么,用户id=1为conditionitem,其中,“用户id”为field,“1”为value。“视频审核结果为通过”是action,其中,“视频审核结果”为field,“通过”为value。

如果直接命中一条规则,condtion的情况是取出对应的value,并且根据配置的操作类型op和配置值value进行逻辑判断;action则根据配置设置当前key对应的value值。

如果没命中,则将field属性解析为“对象名.属性名”的格式,根据对象名从输入数据中获取到对象,利用java反射机制去get/set对应的属性值。

解析为“对象名.属性名”的格式的原理是:仍如上面那条规则“用户id=1则视频审核结果为通过”为例,既然要判断用户id,那就得将用户信息输入规则引擎,定义user为用户对象,其中包含id属性。那么输入数据可以为map.put(“user”,newuser()),即包含key为“user”,value为user对象的一个map数据。

利用java反射机制去get/set对应的属性值的原理是:java对象中每个属性都有对应的get/set方法,get是获取值,set是设置值。反射机制是java提供的底层api,可以根据方法名和具体对象去动态的调用,从而得到或修改该对象的具体属性。

下面以一个具体例子说明。

如前所述,一条规则可以理解为由conditon和action组成,针对一条规则(当前规则)而言,其中的命中与没命中不是说的规则命中还是没命中,是针对输入数据map中的key(关键属性)而言的。

例如:输入的map数据为:

其中的key就是“key1”/“user.id”/”user”三个,其中user对应的是个java对象。

如果此时一条规则conditon为(只包含一个conditonitem):{"groups":[{"field":"user.id","op":"==","value":"3"}],"op":"or"}

输入数据执行该条规则condtion部分时,先从conditon中拿到field,此处为“user.id”,用这个field作为key去输入数据中找输入值。结果匹配到上面的输入数据中存在“user.id”的key,则取出值为2,因为有直接配置的key,所以此时也不在从对象user中去反射id的值了。

如果此时输入数据修改为:

里面的key只有两个了:“key1”/”user”,这时还是上面的规则,执行的时候先用field:“user.id”作为key去输入数据中查到,无法直接找到对应的值,这时候就会将该field解析为“对象名.属性”的格式,那对象名作为key,去输入数据找对应的对象。上面的列子就是,拿“user”作为key去查找,从而获取到了user对象,然后根据反射从对象中取到id的值。

action的执行原理也是如此,例如上面那条规则的action部分为:[{"field":"user.name","value":"张三"}],那这条规则完整的意思就是“如果用户id为3则将其名称修改为张三”。

执行时也是先拿field:"user.name"作为一个整体的key去map数据中查找,如果有就会直接覆盖原来的值(这个就是简单的map赋值),此例子的输入数据中没有key"user.name",所以就会解析为“对象名.属性”的格式,用对象名”user”作为key去map中查找,这时候找到了一个对象,然后利用反射机制,将对象的name属性设置为”张三”。

可见,本发明实施例中,规则引擎是基于json和反射机制实现,基于json的rule规则配置,为规则引擎的前端可视化开发提供了便利,使得该规则引擎配置起来更加方便清晰;在rule的配置上清晰明了,在实现上简单高效。能够通过动态的配置快速响应频繁变动的业务规则调整,减少开发和运维成本,提高系统灵活性;采用规则缓存策略,降低解析规则造成的资源消耗,提高规则引擎运行效率。该规则引擎实现方案对于视频、图文等相关业务的审核策略提供了快速的响应,可极大减轻审核的工作量,节省审核人力成本和开发成本。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。

参照图4,是本发明实施例提供的一种装置结构示意图。该装置包括:

输入数据接收单元401,用于接收输入数据;

规则匹配单元402,用于将所述输入数据在所述规则引擎的规则集中匹配,其中,所述规则集包括多条规则,且所述规则是基于json格式配置的规则;

规则校验及执行单元403,用于对于所述规则,如果所述输入数据中包括规则对应的关键属性,则根据所述关键属性对所述输入数据进行规则校验,并根据所述规则对所述输入数据进行更新操作,如果所述输入数据中不包括所述关键属性,则从所述输入数据中提取出对象,利用java反射机制,获取到所述对象对应的属性值,并根据所述对象及属性值对所述输入数据进行规则校验,并根据规则对所述输入数据进行更新操作。

可选的,所述规则包括条件对象和执行对象,所述装置还包括:

对象配置单元404,用于基于json格式,配置所述条件对象和执行对象;其中,所述条件对象包括字段项参数、操作项目参数和取值项参数组成的json数组,所述执行对象包括字段项参数和设置值项参数组成的json数组。

可选的,所述规则校验及执行单元403包括:

规则校验子单元4031,用于按照规则优先级获取到优先级最高的规则;针对当前获取的规则,根据所述规则中条件对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析所述输入数据,提取出所述关键属性格式对应的关键属性;如果输入数据的关键属性对应的取值与所述条件对象中的关键属性取值一致,则确定为规则校验通过。

可选的,所述规则校验及执行单元403包括:

规则执行子单元4032,用于根据所述规则中执行对象包括的各项参数,确定由一个参数或多个参数组成的关键属性格式;解析所述输入数据,提取出所述关键属性格式对应的关键属性;根据所述执行条件对象中的关键属性取值更新所述输入数据的关键属性的取值。

可选的,如果所述输入数据中不包括所述关键属性,所述规则校验及执行单元403包括:

反射处理子单元4033,用于解析所述字段项参数为对象/属性的格式,并从所述输入数据中获取到对象;利用java反射机制,从所述输入数据中提取出所述对象,并利用该对象的get/set方法得到该对象的属性值。

可选的,所述规则是以分布式结构缓存的。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的可选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括可选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种规则引擎的实现方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1