java Esper规则语言:仅在满足条件一定时间段后触发规则
我想写一条规则,当心率超过160时触发5分钟。我提出的规则如下:
EPAdministrator cepRule3 = cep.getEPAdministrator();
EPStatement cepStatementRule3 = cepRule3.createEPL("select * from "
+ "HeartRate.win:time(5 min) "
+ "group by macAddress "
+ "having min(heartrate) > 160");
cepStatementRule3.addListener(new rule3Listener());
我的心率类别有以下字段:
int heartrate;
String heartratesTimestamp;
String macAddress;
我面临的问题是,每当心率超过160时,这条规则就会生效。相反,我希望它只有在心率保持在160以上5分钟时才会启动。我该如何调整这个规则
# 1 楼答案
EPL: 每(心率(心率>160)->;(计时器:间隔(5分钟)而非心率(心率<;=160))
或者简单地使用Java代码:
EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))"); cepStatementRule3.addListener(new rule3Listener());
在Esper文档中查找EPL模式语法