我是Drools的新手。我需要用Spring启动构建一个应用程序
我正在使用一个“geofence\u rule.drl”文件来保存与地理位置相关的规则。
rule "Rule for Tag position in room 1"
when
model : ComponentModel(positionValue <= 50)
then
model.setRoomId(1);
end
rule "Rule for Tag position in room 2"
when
model : ComponentModel(positionValue > 50)))
then
model.setRoomId(2);
end
模型等级如下所示。
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ComponentModel{
private long tagId;
private long roomId;
private int positionValue;
}
我可能会得到“n”个标签的位置相关数据,比如tag1、tag2、tag3等等。我需要计算tag1在过去5分钟内是否不在房间1中(这意味着tag-1的数据没有达到“房间1中tag位置的规则”)。Drools中是否支持这种计算?
我在drools留档中看到了“not”关键字。但它只是否定了规则的条件。我需要在最后几分钟检查规则的攻击性质,这个时间限制在应用程序中是可配置的。
您正在寻找流模式和负面模式。这些链接指向Drools官方文档。
流模式是Drools中的两种事件模式之一。默认是“云”模式,您可以预先获得所有事实并自动做出决策。另一种模式“流”模式用于处理时间流,这听起来很像您的“ping”应用程序。在流模式下,Drools会在每个事实进入时评估它,并知道时间——即其他事实进入的时间。
流模式中的负模式是not
关键字的逻辑时间扩展。正如您正确指出的,在云模式下,它只是否定一个条件(例如,“工作内存中没有符合此条件的条件。”)但是,在流模式下,您可以更新这些模式以在一段时间内生效。
Drools文档提供了以下示例:
rule "Sound the alarm"
when
$h: Heartbeat() from entry-point "MonitoringStream"
not(Heartbeat(this != $h, this after[0s,10s] $h) from entry-point "MonitoringStream")
then
// Sound the alarm.
end
“when”子句中的第一行标识心跳的实例($h)。第二个标识在10秒内未接收到心跳的情况。如果这两个条件都为true,则执行该规则,在这种情况下会触发警报。
这和你的规则是一样的。
rule "Tag has not been in Room 1 for 5 minutes"
when
// Tag with ID 1, present in Room 1 -- First instance
$tag: ComponentModel( tagId == 1, roomId == 1 ) from entry-point "TrackingStream"
// Trigger if this condition hasn't been met a second time within 5 minutes
not( ComponentModel(
this != $tag,
tagId == 1,
roomId == 1,
this after[0s, 5m] $tag ) from entry-point "TrackingStream")
then
// Do whatever it is you need to do for this condition
end
在本例中,我利用了after临时操作符(链接到Drools文档)
基本上就是这样--
$tag: ComponentModel( tagId == 1, roomId == 1 ) from entry-point "TrackingStream"
第一个条件标识场景,在这种情况下,ID 1存在于房间1中。它标识我们正在跟踪的该情况的当前实例。由于这是一个时间流,很容易将其视为“标记实体(1)刚刚进入房间1”。
not( ComponentModel(
this != $tag,
tagId == 1,
roomId == 1,
this after[0s, 5m] $tag
) from entry-point "TrackingStream")
这就是魔法发生的地方,语法需要一点时间才能习惯。第二个条件是等待下一个时态,然后检查条件。检查的条件包括:
时间约束(this after[0s,5m]$标记)表示等待检查此条件。如果在此时间范围内,在
$标记之后收到第二个ComponentModel,则规则将不会跳闸,场景将重复等待长达5分钟。由于时间范围立即开始检查,我们需要在not(…)中明确地从匹配中排除$tag子句(此!=$标记
)
举例来说,这就是它的执行方式(简化):
$标记
=事件A。我们开始检查传入流的第二个条件本文向大家介绍在使用HTML5时有哪些规则需要遵守?相关面试题,主要包含被问及在使用HTML5时有哪些规则需要遵守?时的应答技巧和注意事项,需要的朋友参考一下 使用HTML5需要遵守哪些规则? 新的特性应该基于HTML、CSS、DOM和JavaScript 减少对外部插件的需求(如Flash) 更好的错误处理 更多的替换脚本的标记 HTML5应与设备无关 开发过程必须可视化
问题内容: 在管道级别,我指定代理和节点(带有标签和自定义工作区)。管道启动时,它将在指定的节点上运行,但是当命中“ build job”时,将选择第一个可用节点。我尝试使用NodeLabel插件,但是那也不起作用。 这是我的: 问题答案: 当您使用Jenkinsfile中的指令时,它告诉Jenkins您想要构建一个完全独立的作业。正是 其他工作 需要指定将要构建的代理。如果这是基于Jenkins
作为一个相对的Java新手,我很困惑地发现了以下几点: 点. java: Edge.java: 主代码段:私有集blockedEdges 为什么这令人惊讶?因为在我将其编码为依赖平等之前,我检查了留档,它说: 如果该集合包含指定的元素,则返回true。更正式地说,当且仅当这个集合包含元素e,使得(o==null?e==null : o.equals(e)) 这句话非常清楚,它指出只需要相等。f.e
本文向大家介绍使用HTML5需要遵守哪些规则?相关面试题,主要包含被问及使用HTML5需要遵守哪些规则?时的应答技巧和注意事项,需要的朋友参考一下 * 新的特性应该基于HTML、CSS、DOM和JavaScript * 减少对外部插件的需求(如Flash) * 更好的错误处理 * 更多的替换脚本的标记 * HTML5应与设备无关 * 开发过程必须可视化
问题内容: 结果如下: 2011-09-24 14:10:51 -0400 2011年9月24日星期六20:10:51 为什么当我解析来自format()的日期时,它不遵守时区? 问题答案: 您正在打印调用的结果,该调用 始终 使用默认时区。基本上,除了调试之外,您不应该使用其他任何东西。 不要忘记,一个不 具有 时区-它代表着一个时刻,因为自Unix纪元(午夜1970年1月1日UTC)毫秒。 如
我在我的项目中使用了Spring Boot,Spring Data,JPA(Hibernate)和MySQL。这是我的存储库界面中的方法签名: 当我检查SQL日志时,我可以看到“for共享”子句被附加到选择语句中。 这是MySQL文档中关于共享锁的一段引文: 如果这些行中的任何一行被尚未提交的另一个事务更改,您的查询将等待该事务结束,然后使用最新值。 我实际上可以通过从另一个线程更新该书来触发阻塞