Esper何时知道时间窗口已经结束

时间:2012-12-14 22:58:17

标签: java esper

在Java Esper中,我想知道时间窗口上的计时器何时结束。换句话说,例如,在EPL语句中(取自esper主页):

select avg(price) from org.myapp.event.OrderEvent.win:time(30 sec)

该声明将用于计算传入事件的平均价格30秒,我想知道我是否可以在声明结束时查明。如果我可以说运行这个语句并且每30秒输出一个声明30秒摘要和整个30秒的输出,那将是很好的。

我尝试使用isStopped()方法,但这似乎没有帮助,除非它确实如此,我可能会错误地使用它?

2 个答案:

答案 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)