eclipse下建立esper的demo

  sper是一个Java开发的事件流处理(ESP:Event Stream Processing)和复杂事件处理(CEP:Complex Event Processing)引擎。CEP:是一种实时事件处理并从大量事件数据流中挖掘复杂模式的技术。ESP:是一种从大量事件数据流中过滤,分析有意义的事件,并能够实时取得这些有意义的信息的技术。该引擎可应用于网络入侵探测,SLA监测,RFID读取,航空运输调控,金融方面(风险管理,欺诈探测)等领域。

  在esper官网的Quick Start中有一个简单的例子,但是并没有说明如何在eclipse中建立该工程。同时,发现quick start中的例子在新版本esper-4.9.0中有一丁点的问题。我下面将说明如何建立esper_demo的工程,并做简单的解释。

一、建立工程导入依赖包

  在eclipse先建立一个java project,然后导入5个必要的依赖jar:esper-4.9.0.jar、antlr-runtime-3.2.jar、cglib-nodep-2.2.jar、commons-logging-1.1.1.jar、log4j-1.2.16.jar,这个几个依赖包都在官网下载来的包中有。

二、代码编写

1、创建Event Class

  根据官网上的例子,先在src建立一个package:org.myapp.event,然后在包下新建一个OrderEvent类。

 1 package org.myapp.event;
 2 
 3 public class OrderEvent {
 4   private String itemName;
 5   private double price;
 6 
 7   public OrderEvent(String itemName, double price) {
 8     this.itemName = itemName;
 9     this.price = price;
10   }
11 
12   public String getItemName() {
13     return itemName;
14   }
15 
16   public double getPrice() {
17     return price;
18   }
19 }

2、建立MyListener类,添加一个Listner

 

 1 package org.myapp.event;
 2 
 3 import com.espertech.esper.client.EventBean;
 4 import com.espertech.esper.client.UpdateListener;
 5 
 6 public class MyListener implements UpdateListener {
 7   public void update(EventBean[] newEvents, EventBean[] oldEvents) {
 8     EventBean event = newEvents[0];
 9     System.out.println("avg=" + event.get("avg(price)"));
10   }
11

 

3、建立一个main类

 1 package org.myapp.event;
 2 
 3 import com.espertech.esper.client.Configuration;
 4 import com.espertech.esper.client.EPServiceProvider;
 5 import com.espertech.esper.client.EPServiceProviderManager;
 6 import com.espertech.esper.client.EPStatement;
 7 
 8 public class test {
 9 
10   public static void main(String[] args) {
11 
12     // EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();
13     // String expression = "select avg(price) from org.myapp.event.OrderEvent.win:time(30 sec)";
14     // EPStatement statement = epService.getEPAdministrator().createEPL(expression);
15 
16     Configuration config = new Configuration();
17     config.addEventTypeAutoName("org.myapp.event");
18     EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config);
19 
20     String epl = "select avg(price) from OrderEvent.win:time(30 sec)";
21     EPStatement statement = epService.getEPAdministrator().createEPL(epl);
22 
23     MyListener listener = new MyListener();
24     statement.addListener(listener);
25 
26     OrderEvent event = new OrderEvent("shirt", 74.50);
27     epService.getEPRuntime().sendEvent(event);
28 
29   }
30 
31 }

   17行,在官网中应该是config.addEventTypeAutoAlias("org.myapp.event");但是,在eclipse中显示错误,查了Configuration的API后发现并没有这个函数。所以,换成了addEventTypeAutoName,这个函数(将这个package中所有的class作为event导入)。EPServiceProviderManager.getDefaultProvider(config)是否有config这个参数,返回的都是默认的EPServiceProvider(API上这么说,令人诧异)。

  这样就可以直接运行了,avg=74.5,这个运行结果恐怕让人一头雾水。我们不妨把26-27替换成如下代码在重新尝试下。

1     for (int i = 0; i < 10; i++) {
2       epService.getEPRuntime().sendEvent(new OrderEvent("Name" + i,(i + 1) * 10));
3       // Thread.sleep(1000);
4     }

  在看下输出结果。是否一目了然了。

 

 

 

posted @ 2013-03-14 19:39  无可奈何SOS  阅读(1766)  评论(0编辑  收藏  举报