Drools @timestamp和";之间的关系是什么;窗口上方:时间“;?
我正在使用Drools 6.2.0.Final,我需要使用window:time处理一组事件。每个事件都有一个日期字段Drools @timestamp和";之间的关系是什么;窗口上方:时间“;?,drools,drools-fusion,Drools,Drools Fusion,我正在使用Drools 6.2.0.Final,我需要使用window:time处理一组事件。每个事件都有一个日期字段 public class Event { private Long id; private Date date; ... 在我的drl中: declare org.drools.examples.broker.events.Event @role( event ) @timestamp (date) end rule
public class Event {
private Long id;
private Date date;
...
在我的drl中:
declare org.drools.examples.broker.events.Event
@role( event )
@timestamp (date)
end
rule "test"
when
$count: Number() from accumulate (
$e: Event() over window:time(40s) from entry-point "stream" ,
count($e))
then
System.out.println("Count:" + $count);
end
- e1(2015-01-01 00:00:00)
- e2(2015-01-01 00:00:20)
- e3(2015-01-01 00:00:40)
- e4(2015-01-01 00:01:00)
session.getEntryPoint("stream").insert(e1);
session.fireAllRules();
session.getEntryPoint("stream").insert(e2);
session.fireAllRules();
session.getEntryPoint("stream").insert(e3);
session.fireAllRules();
session.getEntryPoint("stream").insert(e4);
session.fireAllRules();
场景2:使用pseudo,同时插入一组事件,并将事件的偏移量添加到时钟中
session.getEntryPoint("stream").insert(e1);
session.fireAllRules();
clock.advanceTime(20, TimeUnit.SECONDS);
session.getEntryPoint("stream").insert(e2);
session.fireAllRules();
clock.advanceTime(40, TimeUnit.SECONDS);
session.getEntryPoint("stream").insert(e3);
session.fireAllRules();
clock.advanceTime(60, TimeUnit.SECONDS);
session.getEntryPoint("stream").insert(e4);
session.fireAllRules();
第二种情况运行良好。但我有一些问题:
- @timestamp和“over window:time”之间的关系是什么
- 如果需要在工作内存中插入未排序的事件(按时间戳),会发生什么李>
- 我可以使用事件表示的时间戳而不是插入时间表示的时间戳吗李>
@时间戳、@duration等仅用于将事件关联在一起(例如,A在B之前,A遇到B,等等),并且它们不将事件关联到时钟。但“窗口外:时间”是基于Drools的时钟。窗口的时间使用事件插入工作内存的时刻来匹配规则。您需要使用Drools流模式。@timestamp和“over window:time”之间的关系是什么?长度为d的窗口选择一个包含时间戳x的事件(如果
now.d