我有一个csv文件作为输入适配器,我想每秒从csv文件发送事件。例如,我有A1,A2,A3,B1,B2和B3。我想在第一秒发送A1,A2和A3,在第二秒发送B1,B2和B3。在此参考http://esper.codehaus.org/esperio-4.0.0/doc/reference/en/html_single/index.html#csv-timer中,有关于发送计时器事件的说明。是否根据csv文件中设置的时间戳发送事件?如果是真的,怎么用呢?我已阅读此参考,但我不明白如何使用它。如果引用不能用于每秒发送事件,是否有另一种设置事件的方法,因此可以每秒发送一次?
答案 0 :(得分:2)
除了数据事件之外,您还可以通过发送时间事件以编程方式控制esper引擎中的时钟。
// Esper Configuration
ClassLoader cl = EpnService.class.getClassLoader();
URL configURL = cl.getResource("aem.esper.cfg.xml");
Configuration config = new Configuration();
config.configure(configURL);
// Obtain esper service instance
EPServiceProvider esperSvc_ = EPServiceProviderManager.getProvider("TEST", config);
// Disable internal engine timer (if not already done so in esper config file)
TimerControlEvent controlEvent = new TimerControlEvent(TimerControlEvent.ClockType.CLOCK_EXTERNAL);
esperSvc_.getEPRuntime().sendEvent(controlEvent);
// Set engine time
long timeInMillis = System.currentTimeMillis(); // or use some other time from your data
CurrentTimeEvent timeEvent1 = new CurrentTimeEvent(timeInMillis);
esperSvc_.getEPRuntime().sendEvent(timeEvent1);
// Inject events into engine
Object eventObject1 = new Object();
esperSvc_.getEPRuntime().sendEvent(eventObject1);
// Fast forward engine time
timeInMillis += 1000; // Add 1 second
CurrentTimeEvent timeEvent2 = new CurrentTimeEvent(timeInMillis);
esperSvc_.getEPRuntime().sendEvent(timeEvent2);
// Inject more events into engine
Object eventObject2 = new Object();
esperSvc_.getEPRuntime().sendEvent(eventObject2);