提问者:小点点

在Esper 4.8中发送计时器事件


我有一个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文件中设置的时间戳发送事件吗?如果是真的,如何使用它?我读过这个参考文献,但我不明白如何使用它。如果引用不能用于每秒发送事件,是否有另一种方法来设置事件以便每秒发送?


共1个答案

匿名用户

除了数据事件之外,您还可以通过发送时间事件来编程控制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);