说明:

以下内容,可以参考Esper官方网站《Qucik start & Tutorial 》(顺序做了部分调整)。 PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚),翻译很烂(自己都感觉不能直视),描述不清的,可以随时问。一有时间,将给予解释。

1、什么是Esper?

Esper 是一个事件流处理和事件关联的引擎(CEP,complex event processing复合事件处理)。作为实时事件驱动框架,当事件流中有事件条件发生时,Esper能够触发自定义动作(POJO)。Esper也是为了大量事件关联而设计,当有数百万的事件进来时,用经典的数据库架构来存储所有事件就有点力不从心了。

Esper定制的事件处理语言EPL,允许表达丰富的事件条件、关联性,也可跨越事件窗口,从而最大限度的减少为应对复杂情况而必须建立系统的开发难度。

Esper是轻量级的java内核实现,可以完全嵌入到任何的java进程、javaEE应用服务器或者给予java的ESB(企业服务总线)。Esper可以很快完成传入的大量消息或者事件处理的应用程序的开发工作。

【总结】Esper是一个事件处理和复杂事件关联处理的java内核的轻量级引擎。对于大量事件的处理,能够用最短的时间做出反应,触发相应的操作。另外,为Esper量身定制的事件处理语言——类SQL语言,对于表达事件的条件以及关联关系的处理等非常方便。

2、快速入门

2.1 安装

Esper的运行和安装很容易,从官网下载并解压缩发布的Zip或tar文件即可。只要安装了JVM,便可以运行官网发布的sample。

Esper的核心包是“esper-version.jar”,其运行依赖的jar包,在解压缩后的lib文件夹。

2.2 创建java事件类

Java类是事件表示的不错选择,然而,根据架构需求,也可以选择基于Map或者XML的事件表示。

Order事件的java类表示。一个POJO,如下:

packageorg.myapp.event;public classOrderEvent {privateString itemName;private doubleprice;public OrderEvent(String itemName, doubleprice) {this.itemName =itemName;this.price =price;

}publicString getItemName() {returnitemName;

}public doublegetPrice() {returnprice;

}

}

2.2 创建Statement

Statement是一个连续性的查询,通过引擎实例进行注册,当新数据到达时,实时地向监听提供结果,或通过iteratorAPI获取statement执行结果。

下面的代码段获取了一个引擎实例,并注册了一个持续查询。该查询返回在过去30秒的所有OrderEvent事件的平均价格:

EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(); //获取默认的引擎实例

String expression = "select avg(price) from org.myapp.event.OrderEvent.win:time(30 sec)";

EPStatement statement= epService.getEPAdministrator().createEPL(expression); //注册EPL,获取statement

2.3 添加监听

当statement的结果集发生变化时,引擎会调用监听作为一个或者多个事件的响应。监听类需要实现UpdateListener接口,并在EventBean实例上执行操作:

public class MyListener implementsUpdateListener {public voidupdate(EventBean[] newEvents, EventBean[] oldEvents) {

EventBean event= newEvents[0];

System.out.println("avg=" + event.get("avg(price)"));

}

}

通过对statement添加监听,引擎实例会将statement的运行结果提供给监听程序。添加操作如下:

MyListener listener = newMyListener();

statement.addListener(listener);

2.4 发送事件

运行时(EPRuntime)API接受事件处理。当statement的结果发生改变,引擎会将处理过的事件结果发送给监听。

OrderEvent event = new OrderEvent("shirt", 74.50);

epService.getEPRuntime().sendEvent(event);

2.5 配置(Configuration)

Esper是开箱运行的,基本没有必须需要的配置。除了需要增加statement的可读性,或提供插件扩展和配置关系型数据访问的机会时必需。

一个有用的配置项,指定了采用事件类的java包名。下面是为OrderEvent添加包的声明。

Configuration config = newConfiguration();

config.addEventTypeAutoAlias("org.myapp.event"); //该API杂4.9.0中已经取消,可以使用addEventTypeAutoName

EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config);

添加了包的声明之后,就可以在EPL中移除事件类对应的包名。

String epl = "select avg(price) from OrderEvent.win:time(30 sec)";

EPStatement statement= epService.getEPAdministrator().createEPL(epl);

【总结】

开发一个简单的Esper程序,需要了解如下的API:

1> Configuration 引擎配置API,可以配置关系型数据访问的一些必须参数、Virtual Data Window (虚拟数据窗)、插件等。

2> EPServiceProvider,定义Esper服务提供,也就是Esper引擎。通过EPServiceProvierManager.getDefaultProvder()获取默认的引擎实例。

3> EPAdministrator,statement管理接口,管理引擎实例注册的EPL statement。

4> EPStatement  一个EPL语句。通过EPAdministrator.createEPL这一类的API创建。

5> EPRuntime 运行接口,通过EPServceProvider.getEPRuntime获取。其作用是向引擎实例发送事件。

其中Configuration中很多配置无需设置,只有在使用plug-in或者关系型数据访问的时候,必须设置相关参数。

注: 转载请注明出处。谢谢!!

复杂事件处理 java_复杂事件处理引擎—Esper入门相关推荐

  1. cms概述 。比较shopex和ecshop区别 。smarty模板引擎的入门

    cms概述 为了找到一个合适的cms网站系统,我花了一番功夫搜索了多种cms,包括我用过的和没用过的,知道的和不知道的,当然,必须是开源的.免费的.生成静态页面的.到各自的官方网站,查看了有关资料,下 ...

  2. 微软TTS语音引擎编程入门

    我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的Windows的TTS(Text To Speech)语音引擎.它包含在Windows Speech SDK开发包中 ...

  3. 游戏引擎与游戏引擎开发入门

    早想写一点游戏设计的文章与大家交流,一是经验的问题,二是公司正在紧张的游戏制作期,实在抽不出多少时间,一直没有动手,今天忽然头脑发热,写了一段,以后准备陆续写一些游戏创意,策划,制作,流程管理,和制作 ...

  4. PhysX物理引擎(编程入门)

    PhysX物理引擎(编程入门) --PhysX,Hello World! Author: 华文广   E-MAIL: huawenguang@sina.com  DATE:06/7/20 Hi,大家好 ...

  5. 游戏引擎开发入门教程_v20210102

    游戏引擎(Game Engine)是一款游戏的"发动机",是游戏的核心部件,同时也是一个大型软件系统.游戏画面是否绚丽和流畅,游戏场面是否震撼和真实,这些都是由引擎决定的. 从编程 ...

  6. 虚幻引擎基础入门(C++) — 【代码命名规则篇 02】

    虚幻引擎基础入门(C++) -[代码命名规则篇] 文章目录 虚幻引擎基础入门(C++) -[代码命名规则篇] 一.UBT和UHT 二.代码命名规则(遵循帕斯卡命名法) 三. 资源命名规则 三. 文件夹 ...

  7. python27怎么新建项目_Ren'Py引擎从入门到放弃(2) —— 成功创建第一个工程

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 BuErShen 于 2019-6-28 18:49 编辑 Ren'Py引 ...

  8. pythonlive2d_Ren'Py引擎从入门到放弃(支线6)——还在探索阶段的Live2D

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 BuErShen 于 2019-6-28 18:48 编辑 Ren'Py引 ...

  9. 虚幻引擎基础入门(C++) — 【数据类型篇 04】

    虚幻引擎基础入门(C++) - [数据类型篇 04] 文章目录 虚幻引擎基础入门(C++) - [数据类型篇 04] 一.基本数据类型 二.字符编码 三.字符类型 总结 一.基本数据类型 UE对于C+ ...

最新文章

  1. java开发后台技术_java开发后台的技术
  2. boost::fusion::for_each用法的测试程序
  3. linux 脚本 java_Linux 通过脚本执行Java程序
  4. 安装配置opensips过程记录
  5. python 爬虫工具 butter_GitHub - TheButterflyOdor/proxy_pool: Python爬虫代理IP池(proxy pool)
  6. Hive的行转列及列转行函数使用总结
  7. JCreator使用技巧
  8. echarts 地图 给每个区域设置定位点图标及散点
  9. cad连筋字体怎么安装_你还在为CAD带“?”号头疼吗?丨CAD2500份字体大全及安装方法丨...
  10. java-UI设计(仿QQ登录界面)
  11. 胶囊神经网络模型简介_胶囊网络简介
  12. excel 与mysql交互_excel和数据库交互
  13. 深圳保障性住房【公租房、安居房、人才房】简单说明
  14. 订单减库存 java_高并发场景-订单库存防止超卖
  15. 感恩—父亲节、母亲节由来及日期
  16. [Office] Excel 每行插入空白行 / 隔行插入一行/ 每列插入空白列 / 每隔两行插入一行 / 批量插入空白行
  17. 如何将long类型的时间变量转变为标准时间
  18. OSPF——5种报文(图解)
  19. 游程编码(运行长度编码)
  20. 第三章 SQL错误信息

热门文章

  1. [漏洞分析] CVE-2022-0492 容器逃逸漏洞分析
  2. 使用java实现年月日日期查询
  3. MIT 线性代数 1-5讲总结:消元、主元、初等矩阵、不可逆矩阵的证明、高斯-约尔当求逆、上下三角矩阵、置换矩阵、转置、向量空间与子空间
  4. MySQL 查询结果替换
  5. Python除法保留两位小数点(三种方法实现)
  6. Balsamiq Mockups原型图设计软件
  7. Captcha验证码使用,算术,中文,数字
  8. Http会话保持机制:Cookie、Session和Token
  9. 电脑版终于来了:不限速,支持单个30G大文件上传
  10. GitHub上面Python排名前十得到开源项目