美文网首页
drools中no-loop和lock-on-active的区别

drools中no-loop和lock-on-active的区别

作者: huan1993 | 来源:发表于2022-05-20 15:51 被阅读0次

一、背景

在我们编写drools规则的过程中,可能会发生死循环,那么该怎么解决呢?如果想某一个规则只执行一次,即别的规则导致该规则重新执行,也不需要执行,那么该怎么解决呢?

二、解决方案

针对以上问题,我们可以使用no-looplock-on-active来解决,那么他们又有什么不同呢?此处我说一下我的理解。

  1. no-loop:可以理解为它只针对当前规则生效,如果当前规则的RHS部分发生了变更,导致当前规则触发,那么它不会在执行。
  2. lock-on-active:这个一般和agenda-groupruleflow-group结合使用,它可以保证当前规则只执行一次,如果下方别的规则导致该规则重新符合执行条件,则也不会执行,而(no-loop)会重新执行。
  3. lock-on-active可以理解为增强的no-loop

三、需求

规则一:如果用户的信用分 < 80则认为用户是黑名单用户。
规则二:如果用户是黑名单用户,则直接修改用户的信用分为60。

四、实现

1、no-loop结果

no-loop.jpg

结论: 从上图中可以看出,虽然规则no_loop_rule_01上加了no-loop true,防止了自身规则中,Fact对象的修改导致规则的重新触发,但是没有防止no_loop_rule_02规则中,修改Fact对象,导致no_loop_rule_01的触发。

2、lock-on-active结果

lock-on-active.jpg

结论:
1、阻止了自身的死循环。
2、阻止了别的规则修改Fact对象,导致之前的规则触发。

五、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-drl-no-loop-and-lock-on-active

六、参考链接

1、https://stackoverflow.com/questions/17042437/what-is-the-difference-between-no-loop-and-lock-on-active-in-drools

相关文章

  • drools中no-loop和lock-on-active的区别

    一、背景 在我们编写drools规则的过程中,可能会发生死循环,那么该怎么解决呢?如果想某一个规则只执行一次,即别...

  • Drools

    一. Drools规则引擎 Drools就是为了解决业务代码和业务规则分离的引擎。Drools 规则是在 Java...

  • Drools 规则文件语法概述

    概述(Overview) 以.drl为扩展名的文件,是Drools中的规则文件,规则文件的编写,遵循Drools规...

  • drools的简单入门案例

    一、背景 最近在学习规则引擎drools,此处简单记录一下drools的入门案例。 二、为什么要学习drools ...

  • Drools的Eclipse_IDEA插件安装

    1.说明 Drools使用时不是必须依赖插件的,只是在安装了相应的插件之后,在开发工具中能识别到对应的drools...

  • Drools 规则动态编译运行

    背景 近期遇到一个规则引擎项目,甲方明确要求用Drools规则引擎,之前想象中Drools应该应用在风控、预警类场...

  • Drools Study

    什么是Drools? drools也叫JBoss Rules(JBoss Rules 的前身是Codehaus的一...

  • 推理

    1.drools4.0学习实践(一) 2.Drools简单例子 3.

  • drools执行指定的规则

    1、背景 在我们编写drools规则文件的过程中,可能会编写好多规则。drools引擎在模式匹配的时候,可能一下子...

  • drools中then部分的写法

    @[toc] 1、背景 此处介绍一下drools中then部分的写法,以及一些内置的方法,比如insert/del...

网友评论

      本文标题:drools中no-loop和lock-on-active的区别

      本文链接:https://www.haomeiwen.com/subject/lzuaurtx.html