Esper入门例子
说到Esper,不得不说一下CEP。CEP即Complex Event Process,中文意思就是“复杂事件处理”。听起来好像很复杂,实际上就是基于事件流进行数据处理,把要分析的数据抽象成事件,然后将数据发送到 CEP引擎,引擎就会根据事件的输入和最初注册的处理模型,得到事件处理结果。
CEP是一种标准,Esper只是对这个标准的一种开源实现。除了Esper,很多大公司也有类似的商业软件实现,比如IBM,Sybase等等。CEP的一个重要特点就是他是一个内存计算工具和类SQL语句。内存计算可以说是一把双刃剑。好处自不必说,一个字:快!坏处也显而易见,数据有丢失的风险,而且还有容量的限制(实时计算其实并不受制于内存大小,而是得看如何对实时进行定义,也就是具体的业务来决定了)。所以如果业务不能容忍数据丢 失,那么高可用方案就必须做好,不过Esper的高可用很不好做,后面我将会说到。
CEP的类SQL语句,可以理解为处理模型的定义与描述。这是运行在CEP引擎中的特殊语句,之所以叫他类SQL,是因为它和SQL确实很像,除了 select,insert,delete,update,而且也有avg,count等函数。所以对于会SQL的人来说,他的语法结构大致还是能猜出一 二的。在Esper中,这个句子叫做EPL,即Event Process Language。作为Esper的核心内容,对于它的讲解有三四百页的英文文档,所以之后我会慢慢向大家细细说明的。
下面的场景是计算3个苹果的平均价格。
package test; import com.espertech.esper.client.EPAdministrator; import com.espertech.esper.client.EPRuntime; import com.espertech.esper.client.EPServiceProvider; import com.espertech.esper.client.EPServiceProviderManager; import com.espertech.esper.client.EPStatement; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.UpdateListener; 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; } } class AppleListener implements UpdateListener { public 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); } } } public class Test { public static void main(String[] args) throws InterruptedException { EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(); EPAdministrator admin = epService.getEPAdministrator(); String product = Apple.class.getName(); String epl = "select avg(price) from " + product + ".win:length_batch(3)"; 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(); apple2.setId(2); apple2.setPrice(2); runtime.sendEvent(apple2); Apple apple3 = new Apple(); apple3.setId(3); apple3.setPrice(5); runtime.sendEvent(apple3); } }
下一讲将会讲解Esper的事件。
相关推荐
NULL 博文链接:https://flyingandrunning.iteye.com/blog/870498
最新的Esper(5.0)技术帮助文档
Esper是EsperTech公司使用Java开发的事件流处理(ESP:Event Stream Processing)和复杂事件处理(CEP:Complex Event Processing)引擎。
Esper是著名的开源CEP引擎 Esper源码 Eclipse工程
esper 源码 esper 源码 官网源代码
Esper-4.3.0的adapter手册
java使用esper实现事件分批处理
esper语法整理pdf版上部,下部请查看另一下载资源。
esper相关所有jar
这是esper官网上核心jar文件,有需要的请下载使用
Esper是项先进的事务处理技术。我的演示比esper包中的源码实例容易理解和模仿,想学esper的朋友可以看看。联系我:shansun123@126.com
esper5个核心开发包 antlr-runtime-4.1.jar;cglib-nodep-3.1.jar;commons-logging-1.1.1.jar;esper-5.0.0.jar;log4j-1.2.17.jar
Esper 和Complex 的概述
esper和jms做的小demo,模拟温度控制
esper学习必备的资料,学习esper开发的好帮手,包含和esper的实际用到的内容
这是一个Java版本的Esper示例代码。 示例由于收集并显示一段时间内的,某个项目的数据的平均值。 示例中包含esper4.3的部分jre以及相关库。
关于大规模数据处理工具esper的应用讲解
esper相关操作,包括调用的包以及方法
esper-demo-nuclear, 简单演示Esper复杂事件处理( CEP ) 引擎的一些特性 corsoft-esper-demo 博客可以在以下位置提供: http://www.adrianmilne.com/complex-event-processing-made-easy/还有关于 JavaLobby: h
Esper官方包,使用Esper开发需要最基本的五个jar包——esper-5.2.0.jar,\esper-5.2.0\esper\lib下四个jar包