【规则引擎】之easy-rules入门

https://github.com/j-easy/easy-rules


背景

  在写业务逻辑时,我们不可避免的会使用到if这样的语法;对于特别复杂的业务场景,那么就可能会写很多"并联"或"串联"的if,冗余又不好管理;此时,我们不妨引入规则引擎。在我看来,规则引擎中的"规则即对应if",规则引擎中的"引擎则是统筹管理这些if"的大脑。

  当下规则引擎有很多,如DROOLS、OPENL TABLETS、EASY RULES、RULEBOOK等等,其中DROOLS的功能强大且完善,社区也非常活跃,但是入门门槛相对较高、框架较重,如果项目中if的业务场景非常多,那么不妨采用DROOLS。但是实际上,很多项目只是对规则引擎有一些基本的需求罢了,此时,可以考虑采用EASY RULES,门槛低、使用友好、社区也是相对活跃的。


easy rules的依赖

提示 我们一般只需要前两个就行了。

<!-- https://mvnrepository.com/artifact/org.jeasy/easy-rules-core -->
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-core</artifactId>
    <version>4.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.jeasy/easy-rules-support -->
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-support</artifactId>
    <version>4.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.jeasy/easy-rules-mvel -->
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-mvel</artifactId>
    <version>4.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.jeasy/easy-rules-spel -->
<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-spel</artifactId>
    <version>4.1.0</version>
</dependency>

easy rules的使用步骤

在这里插入图片描述
注:规则引擎执行规则时,是单线程执行的。


easy rules中的规则

  • 规则的分类
      easy rules中,规则可分为简单规则和复合规则。其中复合规则由多个简单规则组合而成。
    在这里插入图片描述

  • 规则相关参数简介

    • Rule:规则。
      • Rule.name:规则名称。
      • Rule.description:规则描述。
      • Rule.priority:规则执行优先级。
    • Facts:因子。一种键值对存储结构,用于存储、传递相关数据。
      • Fact:代表Facts中的某一个键值对。
    • Conditon:判断条件。用于判断是否满足触发action的条件。
    • Action:当条件成立时,执行action中的逻辑。
  • 复合规则(组合规则)简介

    • UnitRuleGroup: 当且仅当group中所有rule的condition都成立时,才执行group中所有rule的action(,否者一个action都不会执行)。

    • ActivationRuleGroup:执行第一个condition成立的rule的action(,剩下的rule将被忽略)。

    • ConditionalRuleGroup:当前group中,是否正常往下走流程,取决于优先级最高的rule的condition是否成立,若成立,则继续往下走此group的流程;若不成立,忽略剩下的rule。

      注:group中rule的优先级,取决于rule的priority;若两个rule之间的priority相同,则优先级取决于这两个rule的自然排序结果。

  • 规则的编写

    • 方式一(推荐):通过注解编写规则。
      在这里插入图片描述

    • 方式二(推荐):通过Builder模式编写规则。
      在这里插入图片描述

    • 方式三:通过MVEL(MVFLEX Expression Language)编写规则。
      在这里插入图片描述

    • 方式四:通过SpEL(Spring Expression Language)编写规则。
      在这里插入图片描述


easy rules中的规则引擎

  规则引擎主要用于将(各个相对独立的)规则进行统筹(如:定义规则与规则之间的关系等)。

  • 规则引擎的分类
    在这里插入图片描述

  • 规则引擎的使用
    在这里插入图片描述

  • 规则引擎参数RulesEngineParameters
      在规则引擎中的各个rule是相对独立的,即便执行时某个rule出错了,也不会影响其它rule的执行。但是在很多时候,我们反而需要的是规则之间互相影响。规则引擎就是通过RulesEngineParameters来控制rule之间的关系的。

    参数描述默认值
    skipOnFirstAppliedRule当出现第一个执行成功了的(rule的)action时,跳过(不执行)剩下rule的actionfalse
    skipOnFirstFailedRule当出现第一个执行报错了的(rule的)action时,跳过(不执行)剩下rule的actionfalse
    skipOnFirstNonTriggeredRule当最高优先级的rule的condition结果为false时,跳过(不执行)所有的rulefalse
    priorityThreshold规则引擎只执行优先级(rule#priority)不低于此参数值的rule
    注:priority越小,优先级越高。
    Integer.MAX_VALUE

监听器

  • 规则监听器
    提示:各方法的执行时机,见下文。
    在这里插入图片描述

  • 规则引擎监听器
    提示:各方法的执行时机,见下文。
    在这里插入图片描述

  • 监听器的执行时机
    在这里插入图片描述


提示 更多详见官网。


^_^ 如有不当之处,欢迎指正

^_^ 官网链接
         https://github.com/j-easy/easy-rules

^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值