Siddhi:模式活动时忽略重复事件

时间:2019-06-05 17:44:06

标签: complex-event-processing siddhi

我有一个non-occurring event pattern来检测某个条件是否发生,如果该条件在一定时间内没有变化,请通知我。下面的查询可以描述为“如果某个用户出现值1,请在5秒钟内提醒该用户没有新值”:

define stream inStream(name string, value int);
partition with (name of inStream) 
begin 
    from every in=inStream[ value == 1 ]
    -> not inStream[ not(value == 1) ] for 5 sec
    select in.name, in.value
    insert into outStream;
end;

此查询完全按预期工作:如果我在5秒钟内未收到不同于1的值,则会触发查询。当重复事件的值为1时,就会出现此问题。

如果我每秒10秒发送一次事件{name: "bob", value: 1},我希望查询被触发两次,一次是5秒,一次是10秒。但是,现在我看到查询从5秒开始每秒触发一次。从本质上讲,查询(按其应有的方式)正在为它看到的值为1的每个事件启动5秒计时器。但是,如果已经有一个计时器正在运行,我希望它不启动该计时器(或至少不输出)。

我尝试通过以下查询(仅添加“输出”行)解决此问题:

define stream inStream(name string, value int);
partition with (name of inStream) 
begin 
    from every in=inStream[ value == 1 ]
    -> not inStream[ not(value == 1) ] for 5 sec
    select in.name, in.value
    output first every 5 sec
    insert into outStream;
end;

我还尝试了output lastoutput all

以上查询无法正常工作:在alllast的情况下,根本没有输出任何事件,在first的情况下,仅输出了一个事件,而不是经过第一个5秒块之后的后续对象。

有什么方法可以实现我想要的吗?我有一种直觉,即使用时间窗或output是解决问题的一种方法,但是到目前为止,它尚无法正常工作。

1 个答案:

答案 0 :(得分:1)

原始问题中的第二个查询按预期运行。我以前使用的是Siddhi 4.1.4。升级到Siddhi 5.0.0后,查询将按我希望的方式工作。