Esper入门简介:一

先确定理解了Esper的思想下:

**

* Chapter 1. Technology Overview

*

***** 1.关系数据库及其sql设计的目地主要是为了数据相对静态和复杂查询比较少的应用(OLTP,磁盘数据的存取有相应的优化结构,当然内存数据库,数据存放在内存内)。

* 对于cep系统来说,内存数据库更接近其目地。

*

***** 2.cep引擎的实现和关系数据库的实现有点相反,数据库一般把数据存放到磁盘(静态的),我们通过网络把sql流传给数据库引擎,操作数据库,返回结果流,流向应用。

* 而cep则是把查询表达式存储,数据事件流流向其中。其实查询表达式中的窗口函数及表达式等组合起来,实现了一种条件性数据结构(时间范围或符合条件的数据才能流向其中存储)。

*

***** 3.cep提供了两种机制处理事件:事件模式和事件流查询。

根据官方网站给的入门例子:

主代码:

package com.doctor.esper.tutorial;

import com.espertech.esper.client.Configuration;
import com.espertech.esper.client.EPServiceProvider;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.client.EPStatement;

/**
 * code for
 *
 * @see http://www.espertech.com/esper/quickstart.php
 *
 * @author doctor
 *
 * @time 2015年5月28日 下午3:51:18
 */
public class QuickStart {

	public static void main(String[] args) {

		// Configuration
		//
		// Esper runs out of the box and no configuration is required. However configuration can help make statements more readable and provides the
		// opportunity to plug-in extensions and to configure relational database access.
		//
		// One useful configuration item specifies Java package names from which to take event classes.
		//
		// This snippet of using the configuration API makes the Java package of the OrderEvent class known to an engine instance:
		// In order to query the OrderEvent events, we can now remove the package name from the statement:see line40

		Configuration configuration = new Configuration();
		configuration.addEventTypeAutoName("com.doctor.esper.tutorial");

		// Creating a Statement
		// A statement is a continuous query registered with an Esper engine instance that provides results to listeners as new data arrives, in
		// real-time, or by demand via the iterator (pull) API.
		// The next code snippet obtains an engine instance and registers a continuous query. The query returns the average price over all OrderEvent
		// events that arrived in the last 30 seconds:
		EPServiceProvider epServiceProvider = EPServiceProviderManager.getDefaultProvider(configuration);
		String expression = "select avg(price) from OrderEvent.win:time(30 sec)";
		EPStatement epStatement = epServiceProvider.getEPAdministrator().createEPL(expression);

		// By attaching the listener to the statement the engine provides the statement's results to the listener:
		MyListener myListener = new MyListener();
		epStatement.addListener(myListener);

		// Sending events
		// The runtime API accepts events for processing. As a statement's results change, the engine indicates the new results to listeners right
		// when the events are processed by the engine.
		// Sending events is straightforward as well:
		OrderEvent orderEvent = new OrderEvent("shirt", 75.50D);
		epServiceProvider.getEPRuntime().sendEvent(orderEvent);

	}

}

定义事件(java普通类形式):

package com.doctor.esper.tutorial;

import com.alibaba.fastjson.JSON;

/**
 * Creating a Java Event Class
 *
 * Java classes are a good choice for representing events, however Map-based or XML event representations can also be good choices depending on
 * your
 * architectural requirements.
 *
 * A sample Java class that represents an order event is shown below. A simple plain-old Java class that provides getter-methods for access to
 * event
 * properties works best:
 *
 * @author doctor
 *
 * @time 2015年5月28日 下午3:59:02
 */
public class OrderEvent {
	private String itemName;
	private double price;

	public OrderEvent(String itemName, double price) {
		this.itemName = itemName;
		this.price = price;
	}

	public String getItemName() {
		return itemName;
	}

	public double getPrice() {
		return price;
	}

	@Override
	public String toString() {
		return JSON.toJSONString(this);
	}
}

监听器/触发器:

/**
 * Adding a Listener
 *
 * Listeners are invoked by the engine in response to one or more events that change a statement's result set. Listeners implement the UpdateListener
 * interface and act on EventBean instances as the next code snippet outlines
 *
 * @author doctor
 *
 * @time 2015年5月28日 下午4:02:37
 */
public class MyListener implements UpdateListener {

	@Override
	public void update(EventBean[] newEvents, EventBean[] oldEvents) {
		EventBean eventBean = newEvents[0];
		System.out.println("avg = " + eventBean.get("avg(price)"));

	}

}

运行下结果:

06-20 16:03:27.702 main  INFO  c.e.e.c.s.EPServiceProviderImpl -    Initializing engine URI ‘default‘ version 5.2.0

avg = 75.5

时间: 2024-10-05 23:27:26

Esper入门简介:一的相关文章

Esper入门简介:二 个人对它的理解

看了官方Esper Reference Version 5.2.0 800多的文档后(其实有的细节没细看),个人对它的理解是: 1.Esper像带缓存失效策略内存数据库. Esper中定义的EPL表达式,其实和sql很多相似功能,而且EPL里面有的不仅仅sql,扩展了很多语法.Esper会解析EPL,定义内存数据结构,缓存失效策略,数据保存,时间监听器,大数据方面的数据流/事件流,JDBCsql方式的查询等等. 比如,窗口函数定义是一种FIFO的缓存,底层用的是双端队列(java中的ArrayD

Esper入门简介:三、 对Esper底层数据结构特点分析,数据的入、出

package com.doctor.esper.reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.doctor.esper.common.EsperUtil; import com.doctor.esper.tutorial.OrderEvent; import com.espertech.esper.client.Configuration; import com.espertech.

Junit(3)JUnit和单元测试入门简介

1.几个相关的概念 白盒测试--把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的. 回归测试--软件或环境的修复或更正后的"再测试",自动测试工具对这类测试尤其有用. 单元测试--是最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设计和编码的细节. JUnit --是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.他是用于单元测试框架体系xUnit的一个实例(用于java语言).主要用于白盒测试,回归测试. 2.

Dubbo入门简介(一)

Dubbo入门简介(一) 一.什么是Dubbo Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.通过扩展spring schema 和 注解标签,可以和spring无缝集成(http://blog.csdn.net/achilles12345/article/details/41789527) 核心组件: Remoting:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交

zabbix专题:第一章 zabbix入门简介(更新中)

zabbix入门简介 备注:本章节图片来自互联网 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本节目录大纲 zabbix专题:第一章 zabbix简介 我们为什么需要监控? 常用的开源监控系统有哪些? Zabbix是什么? Zabbix的功能和特性 Zabbix的架构 Zabbix的工作流程 zabbix的进程 zabbix的逻辑关系图 zabbix监控环境中相关术语 zabbix的流程图,其串联了各术语之间的关系 zabbix的监控架构 zabbix专题:第一章 zabb

Unity 3D入门简介

最近在刚开始学习Unity 3D,在这里记录一下学习心得和学习笔记,边学边写,可能会比较零散.好了,废话不多说,今天从Unity 3D入门写起,主要简要介绍一下Unity 3D的和一些学习资料.以下如果不作特别说明,均是指Windows平台的Unity 3D,版本是4.5.1f3. Unity 3D是一款游戏开发引擎,目前支持2D和3D游戏的开发,其最大的优势就是跨平台性非常好,可以很容易的将PC端制作的游戏移植到Android.IOS等移动平台,当然也可以创建网页游戏.刚开始进行Unity 3

JUnit入门简介(转)

1.学习摘要 看<重构-改善既有代码的设计>这本书的时候,里面提到测试环境对于重构的重要性,想到之前在编写代码的时候都是通过System.out和 alert来做测试,非常麻烦,而且不够正规,对于即将步入工作的人来说,一个正规的写代码习惯和测试习惯是非常重要的,因此我觉得好好学学如何使用 JUnit. 在JUnit和单元测试入门简介一文中提到“JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象:当调用TestSuite对象的run()方法是,会

nodejs的入门简介

1.概念 nodejs不是一种独立的语言,也和php.java..net即是开发语言也是平台不同,其也不是javascript的框架,不能和Extjs相提并论.其是将javascript运行在服务端的开发平台[开发平台就是一个供程序员开发软件的软件.其实也就是一个工具(如:微软VS,JAVA一般是Eclipse……)而已,可以编辑和执行程序员写的开发代码语言,从而变成人们平时使用的软件(如QQ.MSN.游戏……)] 2.作用 javascript是由客户端产生,Node.js是为网络而生. 具有

Linux 内核入门简介

作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 (1) 操作系统 和 内核 简介 操作系统 : -- 功能 : 完成基本功能 和 系统管理; -- 组成 : 内核(kernel), 设备驱动程序(driver), 启动引导程序(bootloader), 命令行(shell), 用户界面(UI), 文件系统(filesystem), 管理工具;