Drools - 重复的事件和时间关系

时间:2010-12-11 07:59:08

标签: events time drools

一般而言,我正在编写事件的规则,这些事件等于(通过属性值)事件可以以连续的方式(每秒)发生。我想仅在每小时的基础上发布匹配事件的规则。

更多细节: 我想在第一次插入事件时(当前不存在)或当插入事件时触发规则,并且当且仅当相等事件已插入工作存储器但是最新的事件至少一小时以前老了。

编写这种规则的合理方式是什么,事件持续时间为24小时?

2 个答案:

答案 0 :(得分:1)

rule X
when
    $e : MyEvent() from entry-point "s"
    not( MyEvent( this != $e, id == $e.id, this before[0s,1h] $e ) from entry-point "s" )
then
    // $e arrived and there is no other event with the same
    // id that happened during the last hour
end

用你用来决定两个事件彼此相关的任何约束来替换“id == $ e.id”。

答案 1 :(得分:0)

您可以像这样创建一个全局队列:

global java.util.List eventQueue;

您还需要从java访问全局队列,所以只需使用:

session.getGlobals();
session.setGlobal(name, value);

在此队列中保存事件和相关时间。然后每小时检查一次这个队列的java代码,并根据时间戳执行规则。这不是流口水不好的方法,但很简单。