当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 15:27:34 Java

1.背景在drools规则的编写过程中,可能会出现死循环,那么如何解决呢?如果只想对某条规则执行一次,即其他规则导致该规则再次执行,不需要执行,那么如何解决呢?2.解决方案对于上面的问题,我们可以使用no-loop和lock-on-active来解决,那么它们有什么区别呢?这里我说说我的理解。no-loop:可以理解为只对当前规则生效。如果改变了当前规则的RHS部分,触发了当前规则,则不会执行。lock-on-active:这通常与agenda-group或ruleflow-group结合使用。可以保证当前规则只执行一次。如果下面的其他规则导致该规则再次满足执行条件,则不执行,重新执行(no-loop)。lock-on-active可以理解为增强的no-loop。3、需求规则1:如果用户的信用评分<80,则认为该用户为黑名单用户。规则二:如果用户是黑名单用户,直接修改用户的信用评分为60。四、实现1、无循环结果结论:从上图可以看出,虽然在规则中加入了无循环trueno_loop_rule_01,它防止了自己规则中修改Fact对象导致规则重新触发,它不防止no_loop_rule_02规则中,修改Fact对象,导致no_loop_rule_01的触发。2.Lock-on-active结果和结论:1.防止了自己的死循环。2.防止其他规则修改Fact对象,导致之前的规则触发。5.完整代码https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-drl-no-loop-and-lock-on-active6.参考链接1,https://stackoverflow.com/questions/17042437/what-is-the-difference-between-no-loop-and-lock-on-active-in-drools