在Java Esper中,我想知道时间窗口上的计时器何时结束。换句话说,例如,在EPL语句中(取自esper主页):
select avg(price) from org.myapp.event.OrderEvent.win:time(30 sec)
该声明将用于计算传入事件的平均价格30秒,我想知道我是否可以在声明结束时查明。如果我可以说运行这个语句并且每30秒输出一个声明30秒摘要和整个30秒的输出,那将是很好的。
我尝试使用isStopped()方法,但这似乎没有帮助,除非它确实如此,我可能会错误地使用它?
答案 0 :(得分:2)
要查明语句何时更改其状态,您可以将StatementStateListener附加到您的提供程序
epProvider = EPServiceProviderManager.getProvider("myCEPEngine", c);
epProvider.addStatementStateListener(new EPStatementStateListener() {
//interface implementation
@Override
public void onStatementStateChange(EPServiceProvider serviceProvider, EPStatement statement) {
//here use the EPStatement statement object to check if the statement is the one of your interest:
//you can compare the name with the one assigned using @Name annotation to your statement
}
});
如果你想简单地每30秒提供一次输出(而不是每当前30秒的最新平均值发生变化时) - 使用输出子句:
select avg(price) from org.myapp.event.OrderEvent.win:time(30 sec) output last every 30 seconds;
答案 1 :(得分:0)