Drools Fusion (Complex Event Processing) 是Drools对于复杂事件处理的模块, 与它功能相似的是Esper, 两者都可以提供基于时间跨度和滑动窗口的事件处理, 两者最大的区别可能就在于1. Drools开源, 不支持Distribution, 语法drl, Esper有企业版, 支持Distribution, 语法类SQL

看了一下官方文档

http://docs.jboss.org/drools/release/5.6.0.Final/drools-fusion-docs/html_single/

写了几个例子

https://github.com/zhwbqd/droolsCEP

下面介绍一下Drools Fusion中一些关键的概念

1. event和fact的区别

  1. event 一般是不变对象
  2. event 与时间强相关
  3. event 拥有可管理的生命周期(一般只会在有限的时间内匹配规则, 方便engine管理自动管理event, 将未匹配的event销毁, 并释放相关资源)
  4. 每个event都有自己的ts, 可以使用滑动时间窗口, 例如: 统计过去60min的平均值
2. drools support 两种语义的event, 时间点和区间(区别是 @duration 注解是否为0)
 
3. 注解:
    1. @role 默认fact, CEP时候 @role(event) 标识fact 是一个event
    2. @timestamp, 每个event都有一个相关的timestamp, 默认是从系统获得(即为插入session的时间), 也可以由外部赋值
    3. @duration, 每个event的持续时间, 在point-in-time event中为0, 默认值也为0, 外部可赋值
    4. @expire, 只在STREAM MODE有效, event的过期时间, @expire(300) 300s过期 @expire(1d3h45m20s29ms) 1天3小时45分钟20秒29毫秒过期
 
4. SessionClock 共有4中, 主要使用的有两种, realtime和pseudo
 
5. After, Before, During, Meet 等关键字 都是用于比较两个事件的发生时间顺序
比如before关键字的意义
3m30s <= $eventB.startTimestamp - $eventA.endTimeStamp <= 4m 
$eventA : EventA( this before[ 3m30s, 4m ] $eventB ) 

6. Sliding Window 只能跑在STREAM模式下, SlidingWindow 会立即执行运算,而不会等到事件满足要求才进行计算, event未在sliding window被匹配上的也不会被销毁, 可能有其他event依赖于它, 它会在自己的expire时间内过期

Drools Fusion (CEP) Example 和 关键概念的更多相关文章

  1. Kafka学习之(一)了解一下Kafka及关键概念和处理机制

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模小打的网站中所有动作流数据.优势 高吞吐量:非常普通的硬件Kafka也可以支持每秒100W的消息,即使在非常廉价的商用机器上也能做 ...

  2. Docker关键概念阐述

    要了解Docker需要对其体系结构中的几个关键概念有所了解,主要包括image.container.service.swarm.stack等. 在介绍这几个概念时,会使用到一个测试环境,这个测试环境是 ...

  3. 【NS-3学习】ns3-模拟基础:关键概念,日志,命令行参数

    前言 本篇博客先介绍在仿真过程中会使用到的一些关键概念,然后介绍便于调试仿真脚本的常用技术:日志.命令行参数. 关键概念 节点 在因特网术语中,主机(终端)是指任何一台连接到网络的计算设备.ns-3并 ...

  4. Libra教程之:Libra协议的关键概念

    文章目录 Libra协议 交易和状态 交易详解 账本状态详解 版本数据库 账户 账户地址 Proof 验证节点 存储 Libra协议 Libra协议是Libra区块链的基础,本文主要讲解Libra协议 ...

  5. DotNetty关键概念及简单示例(基于NET5)

    DotNetty关键概念及简单示例(基于NET5) 目录 DotNetty关键概念及简单示例(基于NET5) 1.DotNetty 设计的关键 1.1 核心组件 1.1.1 Channel 1.1.2 ...

  6. Elasticsearch 的一些关键概念

    我更喜欢把 Elasticsearch 作为一种 nosql 去理解,它的一些开发概念和 MongoDB 以及 Redis 没有太大的区别,不过了解 Elasticsearch 中的一些核心概念对于你 ...

  7. ElasticSearch关键概念

    Elasticsearch 添加索引 一个存储关联数据的地方 用来指向一个或者多个分片(shards)的逻辑命名空间(logical namespcase) 应用程序直接与索引通信 一个分片(shar ...

  8. Compute API 关键概念 详解

    Compute API 是 RESTful HTTP 服务,提供管理虚机的能力. 虚机可能有不同的内存大小,CPU数量,硬盘大小,能够在几分钟之内创建出来.和虚机的交互,可以通过Compute API ...

  9. .net core 关键概念

    startup       startup asp.net core 的入口,在构造函数中完成环境参数的配置. 其中Configure 方法是用来控制如何respond一个http请求的, 例如配置l ...

随机推荐

  1. Quartus和ISE调用Synplify进行综合的问题

    分别尝试采用Quartus和ISE调用第三方综合软件Synplify进行综合. [软件版本] Quartus II 13.0 (SP).ISE 14.4 .Synplify 201303. [问题描述 ...

  2. NFS详细分析

    1. NFS服务介绍 1.1什么是NFS服务 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端 ...

  3. [译]GLUT教程 - 键盘

    Lighthouse3d.com >> GLUT Tutorial >> Input >> Keyboard GLUT可以让应用程序自动监测键盘输入,包括普通按键和 ...

  4. cocos2dx游戏 地图

    #include "HelloWorld.h" USING_NS_CC; CCScene* MyHelloWorld::scene() { // 'scene' is an aut ...

  5. 【Mac系统】之破解Navicat Premium for Mac(中文版)

    前期准备工作: 下载Mac中文版本: 下载地址:链接:https://pan.baidu.com/s/1wShOFK9odsSWBSphgqTdEQ  密码:ipsa 下载完成后进行安装,安装步骤省略 ...

  6. git add . git add -u git add -A命令区别图解

    git版本不同会有所区别: Git Version 1.x:  Git Version 2.x:  git add .  修改(modified)以及新文件(new),但不包括被删除的文件. git ...

  7. 【Caffe】caffemodel的大小计算(转载)

    看到一篇将如何计算caffemodel大小的blog,感觉对理解模型大小很有帮助. 原文地址:http://blog.csdn.net/u014696921/article/details/52413 ...

  8. staitic_cast原理与使用

    本文以下述结构为例: 总结如下: 1) static_cast用于有直接或间接关系的指针或引用之间 转换.没有继承关系的指针不能用此转换,即使二者位于同一类体系中.比如,Left,Right之间不能用 ...

  9. WPF中的数据模板使用方式之一:ContentControl、ContentTemplate和TemplateSelector的使用

    在WPF中,数据模板是非常强大的工具,他是一块定义如何显示绑定的对象的XAML标记.有两种类型的控件支持数据模板:(1)内容控件通过ContentTemplate属性支持数据模板:(2)列表控件通过I ...

  10. ios 手势返回<1>2

    iOS-给push出来的控制器添加全局滑动(返回)手势   在iOS中,当我们push出一个新的控制器的时候,我们可以向右拖拽屏幕的左边缘来返回(pop)到上一级控制器,但是这个功能有两个缺陷: 当自 ...