Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date drools cep当前日期_Date_Drools_Complex Event Processing - Fatal编程技术网

Date drools cep当前日期

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(),这是正

我正在使用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(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罐子