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的區別
- event 一般是不變對象
- event 與時間強相關
- event 擁有可管理的生命周期(一般只會在有限的時間內匹配規則, 方便engine管理自動管理event, 將未匹配的event銷毀, 並釋放相關資源)
- 每個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關鍵字的意義
$eventA : EventA( this before[ 3m30s, 4m ] $eventB )
6. Sliding Window 只能跑在STREAM模式下, SlidingWindow 會立即執行運算,而不會等到事件滿足要求才進行計算, event未在sliding window被匹配上的也不會被銷毀, 可能有其他event依賴於它, 它會在自己的expire時間內過期