Esper的POJO事件处理

来源:互联网 发布:java编程思想视频网盘 编辑:程序博客网 时间:2024/06/05 20:59

       最近也在忙于公司产品的报警模块的功能开发,主要用到的就是esper事件处理引擎。关于Esper的理解见博客《对Esper的理解》,这几篇博客也说说esper支持的几种事件类型。这篇博客介绍一下关于POJO对象事件的支持。

 

       POJO对象的概念就不再赘述了,具体见POJO百科。

       Esper对于POJO的支持是有一些要求,即对每一个POJO的私有属性必须有getter方法,具体的POJO对象见下面的代码,

public class Apple {private int id;private int price;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}}

      有了POJO类之后,需要做的操作就是打开Esper的事件监听,并且要完成具体POJO对象的EPL语句,具体的代码如下:


public class AppleListener implements UpdateListener {@Overridepublic void update(EventBean[] newEvents, EventBean[] oldEvents) {if (newEvents != null) {Double avg = (Double) newEvents[0].get("avg(price)");System.out.println("Apple's average price is " + avg);}}}String product = Apple.class.getName();String epl = "select avg(price) from " + product+ ".win:length_batch(3)";

      有了这两个关键的代码之后,就需要进行测试引擎执行POJO事件了。这时候我们需要将几个POJO类实现,并且将POJO对象传入到引擎中,


EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();EPAdministrator admin = epService.getEPAdministrator();EPStatement state = admin.createEPL(epl);state.addListener(new AppleListener());EPRuntime runtime = epService.getEPRuntime();Apple apple1 = new Apple();apple1.setId(1);apple1.setPrice(5);runtime.sendEvent(apple1);Apple apple2 = new Apple();apple1.setId(2);apple1.setPrice(2);runtime.sendEvent(apple2);Apple apple3 = new Apple();apple1.setId(3);apple1.setPrice(5);runtime.sendEvent(apple3);

       之后执行就能输出一下的结果:

       其实Esper事件处理引擎是非常简单的,开启引擎,加载相应的EPL语句进行监听,如果有POJO对象进来就会进行EPL语句执行,如果符合条件就会输出。只要能够把EPL语句写好,基本上Esper引擎也就会用了。下一篇介绍POJO对象嵌套事件的处理。


0 0
原创粉丝点击