【问题标题】:drools cep current date [duplicate]流口水cep当前日期[重复]
【发布时间】:2016-04-16 14:04:54
【问题描述】:

我正在使用 drools 6 + CEP(融合),我需要检查某些事件是否在当前检查规则的时间前 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");

结束

非常感谢!

【问题讨论】:

    标签: date drools complex-event-processing


    【解决方案1】:

    我们也遇到了同样的问题,这是我们的答案(不确定这是不是最好的方法)。

    我们在云模式下工作,定期调用 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
    

    【讨论】:

    • 这种方法很有帮助,但是如果你想使用 PseudoClock,我可以看到有一个问题,因为你设置为“TickTocker”的“日期”将是系统之一,而不是那个从伪时钟
    • 你是对的。是否可以在 UpdateTickTocker 中修改 TickTocker 的 setNow 以使用 session.getSessionClock().getCurrentTime() 而不是简单的 new DateTime()
    • "session" 未被 DRL 识别。该选项是我一开始就看到的选项,无需将依赖项放在模型中的drools jars
    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2017-11-19
    • 2016-12-23
    相关资源
    最近更新 更多