一般来说,我正在为等于(按属性值)事件可以在任何时间以连续方式(每秒)发生的事件编写规则。我只想按小时为匹配事件触发规则。
更详细地说:我想在第一次插入事件(尚不存在)或插入事件时触发规则,并且当且仅当相等的事件已插入工作内存但最新的事件是至少一小时前。
编写此类规则的合理方式是什么,事件持续时间为 24 小时?
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”替换为您用来确定两个事件相互关联的任何约束。
您可以像这样创建一个全局队列:
global java.util.List eventQueue;
您还需要从 java 访问您的全局队列,所以只需使用:
session.getGlobals();
session.setGlobal(name, value);
在此队列中保存事件和相关时间。然后每小时检查这个队列的java代码,并根据时间戳执行规则。这不是糟糕的流口水方法,而是直截了当。