Java规则引擎有什么优点

介绍

本篇内容主要讲解“Java规则引擎有什么优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java规则引擎有什么优点”吧!

一、概述

1 规则引擎概念

    规则引擎是一种根据规则中包含的指定过滤条件,判断其能否匹配运行时刻的实时条件来执行规则中所规定的动作的引擎。

    规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。

    规则引擎具体执行可以分为接受数据输入,解释业务规则,业务决策三个过程。

2 规则引擎优势:

    声明式编程。规则引擎允许你描述做什么而不是如何去做,规则比编码更容易阅读。

    逻辑与数据分离。数据保存在系统对象中,逻辑保存在规则中。打破了面向对象系统中将数据和逻辑耦合起来的局面。由于逻辑保存在规则中,将来逻辑发生改变时更容易被维护。通过将逻辑集中在一个或数个清晰的规则文件中,取代了之前分散在代码中的局面。

    速度及可测量性。Rete算法、Leaps算法,以及由此衍生出来的Drools的Rete、Leaps算法,提供了对系统数据对象非常有效率的匹配。这些算法经过了大量实际考验的证明。

    知识集中化。通过使用规则,将建立一个可执行的规则库。这意味着规则库代表着现实中的业务策略的唯一对应,理想情况下可读性高的规则还可以被当作文档使用。

    解释机制。通过将规则引擎的决断与决断的原因一起记录下来,规则系统提供了很好的“解释机制”。

    易懂的规则。通过建立对象模型以及DSL(域定义语言),可以用接近自然语言的方式来编写规则。这让非技术人员与领域专家可以用他们自己的逻辑来理解规则(因为程序的复杂性已经被隐藏起来了) 。

3 规则引擎应用场景

    相对于业务系统,规则引擎可以认为是一个独立于业务系统的模块,负责一些规则的计算等。一般来说,规则引擎主要应用在下面的场景中:

  • 风控模型配置,风控规则的设置。

  • 用户积分等配置,如日常操作引起积分变化等。

  • 简单的离线计算,各类数据量比较小的统计等。

    注意事项:规则引擎作为一个单独模块,有其自身的笨重与复杂,并不是所有相关业务系统都需要引入规则引擎。

  • 必须建立一些数据模型。

  • 考虑规则的冲突、优先级等。

  • 控制规则的复杂度,以免给规则配置人员增加过多的学习成本。

    由此可见,对于一些时间周期短、规则复杂且不常变更的项目,规则引擎并不十分适用。

二、原理简介

    通常情况下,Java规则引擎内部由下面几个部分构成:工作内存(Working Memory)即工作区,用于存放被引擎引用的数据对象集合;规则执行队列,用于存放被激活的规则执行实例;静态规则区,用于存放所有被加载的业务规则,这些规则将按照某种数据结构组织,当工作区中的数据发生改变后,引擎需要迅速根据工作区中的对象现状,调整规则执行队列中的规则执行实例。Java规则引擎的结构示意图如图1所示。

Java规则引擎有什么优点

图1 规则引擎执行结构图

    当引擎执行时,会根据规则执行队列中的优先顺序逐条执行规则执行实例,由于规则的执行部分可能会改变工作区的数据对象,从而会使队列中的某些规则执行实例因为条件改变而失效,必须从队列中撤销,也可能会激活原来不满足条件的规则,生成新的规则执行实例进入队列。于是就产生了一种“动态”的规则执行链,形成规则的推理机制。这种规则的“链式”反应完全是由工作区中的数据驱动的。

三、规则引擎选型比较

    以下项目均为开源,超链接中均有其github链接,上面有更为详尽的使用例子。表1 为综合对比结果。

Java规则引擎有什么优点