0

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

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

该语句将用于计算 30 秒内传入事件的平均价格,我想知道是否可以找出语句何时结束。如果我可以说运行此语句并且每 30 秒输出一条语句,说明 30 秒摘要和整个 30 秒的输出,那就太好了。

我尝试使用 isStopped() 方法,但这似乎没有帮助,除非它有帮助并且我可能使用错误?

4

1 回答 1

2

要了解语句何时更改其状态,您可以将 StatementStateListener 附加到您的 Provider

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 秒内的最新平均值发生变化时) - 使用 output 子句:

select avg(price) from org.myapp.event.OrderEvent.win:time(30 sec) output last every 30 seconds;
于 2014-01-30T09:49:24.147 回答