Events 如何使用Drools Fusion处理延迟事件

Events 如何使用Drools Fusion处理延迟事件,events,jboss,drools,complex-event-processing,drools-fusion,Events,Jboss,Drools,Complex Event Processing,Drools Fusion,事件A然后事件B。如果A5分钟后没有事件B,则触发规则 when time1:Event() from entry-point xx not (Event(this after[ 0,5m ] time1) from entry-point xx) then ... end 对于工作正常的实时事件,但在现实生活中,您有延迟的事件,例如来自接口的事件 示例:事件A时间:01:00(mm:ss),但在02:00收到。上述规则将在07:00触发,但业务逻辑要求在06:00触发 我

事件A然后事件B。如果A5分钟后没有事件B,则触发规则

when 
  time1:Event() from entry-point xx 
  not (Event(this after[ 0,5m ] time1) from entry-point xx)
then 
 ... 
end 
对于工作正常的实时事件,但在现实生活中,您有延迟的事件,例如来自接口的事件

示例:事件A时间:01:00(mm:ss),但在02:00收到。上述规则将在07:00触发,但业务逻辑要求在06:00触发


我如何处理这种需求

这个问题没有一个单一的答案,因为有不同的情况。您在这里介绍的用例很容易修复,但只需使用外部标记的时间戳即可。假设您的事件包含一个属性(例如datetime),该属性包含事件发生在源位置时的时间戳,您可以告诉引擎将其用作事件的时间戳。例如:

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

在这种情况下,引擎将使用01:00作为事件时间戳,规则将在06:00触发(假设没有发生其他事件),即使event1在02:00到达。

由于存在不同的情况,该问题没有单一的答案。您在这里介绍的用例很容易修复,但只需使用外部标记的时间戳即可。假设您的事件包含一个属性(例如datetime),该属性包含事件发生在源位置时的时间戳,您可以告诉引擎将其用作事件的时间戳。例如:

declare Event
    @role( event )
    @timestamp( datetime )
end
在这种情况下,引擎将使用01:00作为事件时间戳,规则将在06:00触发(假设没有发生其他事件),即使event1在02:00到达。

我相信(并尝试过)它不起作用。我找不到任何关于这项工作的暗示。文档中说,事件是不可变的,“你不能改变过去”。我相信(并尝试过)这是行不通的。我找不到任何关于这项工作的暗示。文档中说类似事件的东西是不可变的,“你不能改变过去”。