标签:drools no lock 规则 active loop
一、背景
在我们编写drools
规则的过程中,可能会发生死循环,那么该怎么解决呢?如果想某一个规则只执行一次,即别的规则导致该规则重新执行,也不需要执行,那么该怎么解决呢?
二、解决方案
针对以上问题,我们可以使用no-loop
和lock-on-active
来解决,那么他们又有什么不同呢?此处我说一下我的理解。
no-loop:
可以理解为它只针对当前规则生效
,如果当前规则的RHS
部分发生了变更,导致当前规则触发,那么它不会在执行。lock-on-active:
这个一般和agenda-group
或ruleflow-group
结合使用,它可以保证当前规则只执行一次,如果下方别的规则导致该规则重新符合执行条件,则也不会执行,而(no-loop
)会重新执行。lock-on-active
可以理解为增强的no-loop
。
三、需求
规则一:如果用户的信用分 < 80
则认为用户是黑名单用户。
规则二:如果用户是黑名单用户,则直接修改用户的信用分为60。
四、实现
1、no-loop结果
结论:
从上图中可以看出,虽然规则no_loop_rule_01
上加了no-loop true
,防止了自身规则中,Fact
对象的修改导致规则的重新触发,但是没有防止no_loop_rule_02
规则中,修改Fact
对象,导致no_loop_rule_01
的触发。
2、lock-on-active结果
结论:
1、阻止了自身的死循环。
2、阻止了别的规则修改Fact
对象,导致之前的规则触发。
五、完整代码
六、参考链接
标签:drools,no,lock,规则,active,loop 来源: https://www.cnblogs.com/huan1993/p/16292568.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。