complex-event-processing - 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可以做到这一点吗?如果是这样,有人可以提供一个可以实现此目的的示例查询吗?
解决方案
根据您的评论,我正在撰写以下答案。 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 状态转换。
更轻松的序列结构是模式。在放宽连续到达要求的同时与序列相同。希望这可以帮助!!
推荐阅读
- c# - C# 中的自定义类型(类似于 typescript)
- python - 方法不允许 iis
- python - 在 Python 中按文件名将照片排序到文件夹中
- javascript - 换行文本的 JavaScript 正则表达式
- javascript - JavaScript 仅在运算结果 < 100 时运行运算
- python - 如何在 ID 行后跟值行的文件中按 ID 对行进行分组?
- android - 如何在 Android 中以编程方式(无布局)获取 camera2 预览帧?
- laravel - Auth::check() 在自定义中间件中返回 false,怎么了?
- math - 为什么在执行 PCA 时计算特征向量和特征值如此有效?
- bash - 在 CLion 中导入 ROS 项目和工作区时出错