NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

通过 Esper 探索事件驱动架构

  • 2007-05-31
  • 本文字数:958 字

    阅读完需:约 3 分钟

在 Java One 上 Thomas Bernhardt 和 Alexandre Vasseur 向我们解说了事件驱动应用服务器(Event Driven Application Server)的概念,并介绍了 Esper 项目

事件驱动应用服务器是一种新型的服务器,为每秒需要处理超过 100,000 个事件的服务器提供一个运行时和多种支撑基础设施服务(如传输、安全、事件日志、高可靠性和连接器等)。除了事件处理以外,事件驱动服务器还可以将事件信息和长时间存在的数据(通常从关系数据库查询中获取)结合起来,以及在事件流上执行临时的关联关系和匹配操作。

事件系统(Event System)存在两个概念,可使之与消息传送系统(Messaging System)区分开来:

  • 事件流处理(Event Stream Processing,ESP)——检测事件数据流,分析出那些符合条件的事件,然后通知监听器
  • 复杂事件处理(Complex Event Processing,CEP)——可以监察各事件间的模式

全功能的事件驱动服务器尚需数年时间方可实现,但现在开发者就可通过来自 Codehaus 的 Esper,在独立应用、Java 企业级应用和 Spring 应用中实现事件驱动架构。Esper 的 1.0 版本( InfoQ 曾报道过)是在 2006 年 6 月发布的,它是一个轻量级、可嵌入的 ESP 和 CEP 的开源实现。

把 Esper 集成到独立应用中其实很简单。步骤如下:

  • 获取一个 Esper 引擎实例
  • 生成一个 Statement(用 Esper 的查询语言)
  • 使用引擎注册这个 Statement
  • 生成一个 Listener(通过实现一个 Java 接口,该接口在 Statement 所得值为 true 会被触发),并把它跟 Statement 绑定起来

事件能以 Java 对象、XML 或 Map 的形式展现,当它们通过系统的时候,系统会评估 Statement 的值,并执行 Listener 中的逻辑。

Esper 查询语言提供了丰富的语法,这些语法可以表达复杂的临时逻辑,此外还有如下的一些特征:

  • 事件过滤
  • 滑动窗口和聚集(计算在最近 30 秒内所有报告的有意义的信息)
  • 分组窗口和对输出率的限制(获取最近 10 分钟内每个区域的信息数量)
  • 连接和外连接(允许事件流之间的连接)
  • 与历史数据或引用数据集成(访问关系型数据库)
  • 生成所有 Statement 都可以访问的虚拟流

虽然事件驱动应用服务器的面世尚需时日,Esper 目前已经可以投入产品级应用了。你很简单就可以把 Esper 集成到你的应用中,将帮助你先人一着提供符合业务和客户在实时性方面需求的功能。

查看英文原文: Exploring Event Driven Architectures with Esper

2007-05-31 23:592454
用户头像

发布了 27 篇内容, 共 98600 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

Unity 之 安卓堆栈跟踪和日志工具 (Android Logcat | 符号表解析Bugly捕获)

陈言必行

Unity 三周年连更 日志工具

数据库原理及MySQL应用 | 数据表操作

TiAmo

数据库 MySQL数据库 数据表 三周年连更

连续信源的熵与RD

timerring

信息论 三周年连更

NoClassDefFoundError 和 ClassNotFoundException 有什么区别 | 社区征文

共饮一杯无

NoClassDefFoundError 三周年连更 ClassNotFoundException

进程与线程、并行和并发有啥区别 | 社区征文

共饮一杯无

Java 多线程 三周年征文

IPv6地址分类

穿过生命散发芬芳

ipv6 三周年连更

Mac上实用的工具分享

IT蜗壳-Tango

三周年连更

FastAPI 快速开发 Web API 项目: 响应模型与错误处理

宇宙之一粟

Python FastApi 三周年连更

Ai工具推荐 - Claude(手机端也可使用的媲美ChatGPT的产品)

炜娓道来程序人生

AI 工具 ChatGPT

Spring Data开发手册|Java持久化API(JPA)需要了解到什么程度呢?

浅羽技术

Java 框架 jpa ORM 三周年连更

从零开始学习MySQL调试跟踪(2)

GreatSQL

C生万物 | 函数的讲解与剖析【内附众多案例详解】

Fire_Shield

C语言 三周年连更

参与开源之夏 x OpenTiny 跨端跨框架 UI 组件库贡献,可以赢取奖金🏆!这份《OpenTiny 开源贡献指南》请收好🎁!

Kagol

开源 Vue 前端 UI组件库

Fragment——底部导航栏的实现

智趣匠

Fragment QRadioButton 三周年连更

抖音起诉某刷量软件侵权获胜,如何严厉打击刷量、数据造假现象

石头IT视角

Java中「Future」接口详解

Java 架构

使用chatGPT自动回复抖音评论

南城FE

人工智能 AI 前端 后端

支持宽屏格式的音乐播放器:Swinsian mac版

真大的脸盆

Mac Mac 软件 播放器 音乐播放器

$ZZZ 以 Launchpad 形式多平台首发,GoSleep 成 Sleep to Earn 叙事成 X2E 新宠

股市老人

css水平垂直居中各种方法实现方式

肥晨

三周年连更

markdown格式基础用法

乌龟哥哥

三周年连更

ER 图是什么?这一篇让你搞懂 ER 图!

产品海豚湾

数据分析 产品设计 ER图 产品架构 业务梳理

Mysql常用数据类型及其默认值

will

MySQL varchar 数据类型 tinyint

HTTP报文的组成

阿泽🧸

HTTP 三周年连更

如何管理你的python包 | python小知识

AIWeker

Python python小知识 三周年连更

一文了解 Go 标准库 math 和 rand 的常用函数

陈明勇

Go golang math 三周年连更 rand

一文读懂Spring中的AOP机制

老周聊架构

三周年连更

如何检查 Linux 内存使用量是否耗尽?这5个命令堪称绝了!

wljslmz

Linux 三周年连更

如何基于 zap 封装一个更好用的日志库

江湖十年

后端 日志 log Go 语言

跨平台应用开发进阶(四十七)APP字体库文件处理方案

No Silver Bullet

App 跨平台应用开发 三周年连更 字体库

CSS架构之BEM设计模式

肥晨

CSS bem 三周年连更 css架构

通过Esper探索事件驱动架构_Java_Ian Roughley_InfoQ精选文章