Date drools cep当前日期
我正在使用drools 6+CEP(fusion),我需要检查某些事件是否在当前规则检查前10分钟发生。为此,我采取了以下方法:Date drools cep当前日期,date,drools,complex-event-processing,Date,Drools,Complex Event Processing,我正在使用drools 6+CEP(fusion),我需要检查某些事件是否在当前规则检查前10分钟发生。为此,我采取了以下方法: rule "Before rule test" when $fall : Fall() $current : Date(this after[10m] $fall) then System.out.println("Fall older than 10m at least"); 结束 如果我每次运行时都插入一个事实new Date(),这是正
rule "Before rule test"
when
$fall : Fall()
$current : Date(this after[10m] $fall)
then
System.out.println("Fall older than 10m at least");
结束
如果我每次运行时都插入一个事实new Date()
,这是正常工作的,因此我想知道是否有任何对象可以执行以下操作:
rule "Before rule test"
when
$fall : Fall(this before[10m] drools.currentDate)
then
System.out.println("Fall older than 10m at least");
结束
多谢各位 我们也遇到了同样的问题,下面是我们的答案(不确定这是最好的方法) 我们在云模式下工作,定期调用fireAllRules
declare TickTocker
@propertyReactive
Now : DateTime
end
rule "CreateTickTocker"
when
not($tickTocker:TickTocker())
then
TickTocker tickTocker = new TickTocker();
tickTocker.setNow(new DateTime());
insert(tickTocker);
end
rule "UpdateTickTocker"
timer (cron: 0/1 * * * * ? )
when
$tickTocker:TickTocker()
then
modify($tickTocker){
setNow(new DateTime())
}
end
用法:
rule "AlertOnLatency"
when
$tickTocker:TickTocker()
$monitored:MyObject(
PeremptionDate < $tickTocker.Now)
then
raiseAlert($monitored);
end
规则“警报状态”
什么时候
$tickTocker:tickTocker()
$monitored:MyObject(
强制日期<$tickTocker.Now)
然后
拉塞勒特(监测);
结束
这种方法非常有用,但我可以看出,如果您想使用伪时钟,则存在一个问题,因为您设置为“滴答滴答”的“日期”将是系统日期,而不是伪时钟中的日期您是对的。是否可以在UpdatecKTocker中修改TickTocker的setNow以使用会话。GetSessionLock().getCurrentTime()
而不是简单的新日期时间()
?“会话”不被DRL识别。这个选项是我从一开始就考虑过的,不需要在模型中依赖drools罐子