使用EPL跟踪一系列事件

时间:2012-11-28 15:03:07

标签: java event-handling esper complex-event-processing

我正在编写一个基于Java的Web服务器监视器应用程序,应该能够检测用户在特定时间范围内按特定顺序浏览给定的一组页面。为此,我正在使用Esper library。我对查询的最佳表述有疑问。

我首先声明了一个'Access'对象,用于存储到达我的Web服务器的HTTP请求的所有信息。每当向服务器发出新请求时,实例化新的Access对象并将其作为事件发送到EPL处理核心。

假设我想要跟踪浏览页面A,页面B和页面C的所有用户。这是处理此类案例的最佳方法?我是否需要执行多个连接,每个过渡一个,如下例所示?

select * from Access(request='GET /A HTTP/1.1').win:time(30 sec) as a1,
Access(request='GET /B HTTP/1.1').win:time(30 sec) as a2, 
Access(request='GET /C HTTP/1.1').win:time(30 sec) as a3
where a1.IP=a2.IP AND a2.IP=a3.IP

2 个答案:

答案 0 :(得分:0)

订单未定义时使用联接,即用户可以按任意顺序浏览A / B / C.

使用模式(基于EPL或基于正则表达式的匹配识别)来检测特定顺序。

答案 1 :(得分:0)

select * from pattern[ every
    a=pageA ->
    b=pageB(a.IP=b.IP) ->
    c=pageC(a.IP=b.IP and c.IP=b.IP) within timer.interval(30s)];

希望如果你想按特定顺序进行,这可能会有所帮助。