对于满足规则的事件,如何在侦听器中获取相关的滑动窗口(ID /名称)详细信息。
例如,我们有规则 -
select * from StockTick.win:time(10) having avg(price) > 20
我们收到StockTick事件A,B(作为滑动窗口1的一部分)。
事件B,C作为滑动窗口2的一部分(作为滑动窗口2的一部分)。
事件A是滑动窗口1的一部分,事件B是窗口1和2的一部分,事件C是滑动窗口2的一部分。
现在,对于每个事件A,B和C(B在侦听器中接收两次),如何在侦听器中找到与事件bean A,B和C相关联的滑动窗口(1或2)。
我使用了UpdateListener和StatementAwareUpdateListener。我无法获得有关与事件bean相关的滑动窗口的信息。
答案 0 :(得分:0)
我不确定我完全明白你在问什么,但如果你只有2个不同的查询,那么
窗口1)
select * from StockTick.win:time(10) having avg(price) > 20
和窗口2)
select * from StockTick.win:time(10) having avg(price) > 40
然后我做的是使用2个不同的事件处理程序来区分每个事件来自哪个窗口:
EPServiceProvider epService = EPServiceProviderManager.GetDefaultProvider();
EPAdministrator admin = epService.EPAdministrator;
EPStatement avg20 = admin.CreateEPL("select * from StockTick.win:time(10) having avg(price) > 20");
EPStatement avg40 = admin.CreateEPL("select * from StockTick.win:time(10) having avg(price) > 40");
avg20.Events += HandleAvg20Event;
// Example event handler code
public void HandleAvg20Event(Object sender, UpdateEventArgs e) {
Console.WriteLine("event came from avg20 stream");
}
avg40.Events += HandleAvg40Event;
// Example event handler code
public void HandleAvg40Event(Object sender, UpdateEventArgs e) {
Console.WriteLine("event came from avg40 stream");
}
答案 1 :(得分:0)
对于活动A,B和B,您应该有3个单独的陈述。 C
并将单独的听众附加到他们身上。
例如,我有来自证券的股票事件--SAPE,PNG和GOOG。我会写三个单独的查询,如
@Name('Select SAPE > 20')
select * from StockTick.win:time(10) having avg(price) > 20 and symbol = 'SAPE'
@Name('Select PNG > 25')
select * from StockTick.win:time(10) having avg(price) > 25 and symbol = 'PNG'
@Name('Select GOOG> 19')
select * from StockTick.win:time(10) having avg(price) > 19 and symbol = 'GOOG'
在代码中,我将得到如下语句
EPStatement PNGSignal = epService.getEPAdministrator().getStatement(
"Select PNG > 25");
EPStatement SAPESignal = epService.getEPAdministrator().getStatement(
"Select SAPE > 20");
EPStatement GOOGSignal = epService.getEPAdministrator().getStatement(
"Select GOOG > 19");
然后,对于每个语句,我将附加一个更新侦听器到每个语句
PNGSignal.addListener( new updateListener {@Override
public void update(EventBean[] arg0, EventBean[] arg1) {
//Sysout - inside PNG Signal
}
});
GOOGSignal.addListener( new updateListener {@Override
public void update(EventBean[] arg0, EventBean[] arg1) {
//Sysout - inside GOOG Signal
}
});
有关更多信息,请参阅我的CEP / ESPER视频 http://www.youtube.com/watch?feature=player_embedded&v=emwwpvfaddw