使用time_batch安全地关闭Esper语句

时间:2014-10-14 16:51:10

标签: java esper

我有一个用于连接两种事件类型的Esper语句。它有一个time_batch。声明如下。

select * from LogEvent1.std:firstunique(transactionId).win:time_batch(1 min) log1
  left outer join
  LogEvent2.std:firstunique(transactionId).win:time_batch(1 min) log2
  on log1.transactionId = log2.transactionId

因此,事件的批处理时间为1分钟,然后发布。我的问题是如何处理应用程序关闭而不会丢失累积但尚未发布的事件。

有没有办法停止会触发缓冲区中累积事件的语句。我使用EPStatement.stop()方法进行了测试,但它没有在批处理中释放当前累积的事件。

2 个答案:

答案 0 :(得分:0)

您可以在以后的某个时间为语句设置时间。

您也可以使用statement.iterate()。

答案 1 :(得分:0)

我设法通过手动推进时间来实现这一目标。

val nextExecutionTime: Long = esperRuntime().getNextScheduledTime
esperProvider.getEPRuntime.sendEvent(new TimerControlEvent(TimerControlEvent.ClockType.CLOCK_EXTERNAL))
esperProvider.getEPRuntime.sendEvent(new CurrentTimeEvent(nextExecutionTime + 1000))
//Wait till processing finishes
Thread.sleep(1000);