drools中no-loop和lock-on-active的区别
一、背景
在我们编写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
对象,导致之前的规则触发。五、完整代码 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
推荐阅读
- 谁能建议如何在android Recycler View中按产品价格实现排序[关闭]
- 在表单提交中找不到错误类'AppModel'
- 如何使用Android Studio解决抖动中的gradle错误()
- 如何在Android模拟器中安装Google Fit应用()
- 在SAP PI 7.5中,无法在参数化的Java Mapping中显示树状视图。
- 在Flask中,可以使用create_app()模式导入视图而无需使用蓝图吗()
- Heads Up通知和徽章在某些Android设备中没有显示()
- 8个要在你的WordPress开发中添加的最佳插件
- 无法在使用win32COM python库创建的PIVOT表中插入计算字段
- 如何像在REST中一样实现GRPC调用()