首页 > 解决方案 > Siddhi 查询在时间限制内先于另一个事件

问题描述

我正在尝试编写一个 Siddhi 查询来检测一个事件是否在时间限制内没有发生在另一个事件之前。在 siddhi 应用程序的整个生命周期中,我必须检测“X”是否在“Y”之前发生过的查询是:

from stream[value == 'Y']
and not stream[value == 'X']

我假设添加时间限制会起作用:

from stream[value == 'Y']
and not stream[value == 'X'] for 5 min

但是,“for”语句从来没有我能看到的任何效果。无论“X”是 4 分钟前还是 6 分钟前,都会触发此查询。我知道可以通过在时间限制内检查“Y”是否在“X”之后来实现类似的效果,但出于我的目的,我需要知道相反的方式。

Siddhi可以做到这一点吗?如果是这样,有人可以提供一个可以实现此目的的示例查询吗?

标签: complex-event-processingsiddhistream-processing

解决方案


根据您的评论,我正在撰写以下答案。 Siddhi 中的序列构造将保证没有人可以在随机点进入状态流。作为示例,让我们以下面的示例序列查询为例。

from every e1=InputStream[state='X'], e2=InputStream[state'Y']
select e1.state as initialState, e2.state as finalState
insert into NextStream;

所以在这里我们要求 X 后跟一个连续的 Y。如果 Y 在 X 序列构造之前出现,将处理它并丢弃 Y。所以进入 NextStream 的任何内容都保证满足 x -> Y 状态转换。

更轻松的序列结构是模式。在放宽连续到达要求的同时与序列相同。希望这可以帮助!!


推荐阅读