2012-03-14 94 views
1

事件A然后事件B。如果有没有事件B 5分钟后A则触发规则。如何使用Drools Fusion处理延迟事件

when 
    time1:Event() from entry-point xx 
    not (Event(this after[ 0,5m ] time1) from entry-point xx) 
then 
... 
end 

对于实时事件工作正常,但在现实生活中你有延迟,例如,即将发生的事件。从一个界面。

实例:事件的时间:01:00(MM:SS),但在02:00以上规定受到触发07:00,但商业逻辑将要求它在06:00

被触发

我该如何处理这种要求?

回答

1

问题没有一个答案,因为存在不同的情况。您在这里介绍的用例很容易修复,但只需使用外部加盖的时间戳。假设你的事件包含一个属性(例如日期时间),其中包含时间戳发生时的时间戳,你可以告诉引擎使用它作为事件的时间戳。例如: -

declare Event 
    @role(event) 
    @timestamp(datetime) 
end 

在这种情况下,则发动机将采用01:00的事件时间戳和规则将在06:00解雇(假设没有其它事件发生),即使事件1抵达02:00。

+0

我相信(并尝试过)它不起作用。我无法找到关于这个工作的任何提示。文件说事情是不可改变的,'你不能改变过去'。 – javadude 2012-03-15 04:19:58