目录
目录 ............................................................................................................................................................................................... 1 第1章EPL开发环境 .................................................................................................................................................................... 2
安装 ....................................................................................................................................................................................... 2 APAMA自带EPL资料 ........................................................................................................................................................... 2 第2章EPL语言 ............................................................................................................................................................................ 2
基本类型 ............................................................................................................................................................................... 2 语句 ....................................................................................................................................................................................... 3 Event ...................................................................................................................................................................................... 7 Monitor .................................................................................................................................................................................. 9 Listener .................................................................................................................................................................................10 Stream ..................................................................................................................................................................................10 第3章EPL与事件驱动 ..............................................................................................................................................................11
描述事件 .............................................................................................................................................................................11 处理事件 .............................................................................................................................................................................11
第1章EPL开发环境
安装
略
APAMA自带EPL资料
1. APAMA安装目录下/doc/index.html
2. APAMA安装目录下/doc/pdf/*.pdf
3. APAMA安装目录下/samples/monitorscript
第2章EPL语言
基本类型
1. boolean 布尔,只有true和false2个取值
2. integer 8字节有符号整数
3. float 8字节浮点数
4. string字符串
5. sequence 数组,Value类型可以是boolean、integer、float、string、sequence、dictionary和event。6. dictionary 字典,Key可以是boolean、integer、float、string、sequence、dictionary和event。语句
1. 变量声明
类型 变量名;
boolean b1;
string s1 := “hello”;
dictionary dictionary;2. 变量赋值
使用:=作为赋值操作符
float threshold := 0.005;
integer myMoney;
myOrders := new
myMoney := -250;
3. if/else
if (判断条件) then {
}
if (判断条件) then {
} else {
}
if (判断条件) then {
} else if (判断条件) then {
} else {
}
4. 判断语句
=表示等于,>表示大于,<表示小于,>=表示大于或等于,<=表示小于或等于,not表示非,and表示并且,or表示或者,
if (myBookNum > 1000) then {
log “我有好多书”;
if (haveReadNum = 0) then {
log “,一本也没读”;
} else if not (haveReadNum>500) then {
log “还好读了几本”;
}
}
5. for
for 变量 in sequence<> {
}
string s1;
sequence sq1 := new sequence;for s1 in sq1 {
log s1;
}
dictionary dic1 := new dictionary;for s1 in dic1.values() {
log s1;
}
6. while
while 判断条件 {
}
integer k := 0;
while k < 250 {
log k.toString();
k := k + 1;
}
Event
event 事件名 {
类型 变量名;
action 函数名(参数列表) 返回值 {
}
}
action可以作为类型
self类似this
package sample.epl.basics;
event BookId {
string name;
}
event MyBookStore {
dictionary book_set;string store_name;
dictionary > observerMap;action storeBook(BookId id,integer num) {
if book_set.hasKey(id) then {
book_set[id] := book_set[id] + num;
} else { book_set.add(id, num); }
action ab;if (self.book_set[id] > 0) then {
ab := self.observerMap[id];
ab(id);
} else { self.book_set.remove(id); }
}
}
Monitor
monitor 名字 {
action onload() {
这是必须函数,在monitor注入时被调用
}
action ondie() {
在die被调用,即monitor实例销毁时被调用
}
action onunload() {
在monitor被卸载时调用
}
}
Listener
listener是一个类型
listener 变量名 := 事件listener
事件listener使用on关键字,all表示所有,没有all表示一次
OrderUpdate ou;
listener l1 := on all OrderUpdate() : ou{
log ou.toString();
}
Stream
stream是一个类型
stream<类型> 变量名 := 事件stream
stream sk := all K();stream文档主要有:APAMAAPAMA
安装目录下doc/pdf/ doc/pdf/
ApamaEPLStreamsAShortTour.pdf, 安装目录下
developing_epl.pdf中Working with streams and stream queries这一章。
第3章EPL与事件驱动
描述事件
采用EPL可以很方便的描述事件。
处理事件
1. 简单处理
APAMA外部给correlator发送一个事件,然后correlator触发相应的listener
com.apama.marketdata.Depth d;
on all com.apama.marketdata.Depth():d {
log d.toString();
}
在收到com.apama.marketdata.Depth(“abc”,[],[],[],[],[],{})事件,correlator运行相应的epl代码
2. 复杂处理
a) 通过编写epl代码,产生事件流
event A { integer a; }
event B { integer b; }
event C { integer c; }
on all A() : a { route B(a.a+1); }
on all B() : b { route C(b.b+1); }
on all C() : c { log “你中奖了”; }
b) 通过stream进行事件的聚合
3. event Book {
4. string name;
5. float price;
6. }
7. event SelectBook { string name; float price; float avgPrice; }
8. monitor BookStreamTest {
9. action onload() {
10. stream bs := all Book();11. stream fs := from b in bs retain 1000 selectcom.apama.aggregates.avg(b.price);
12. SelectBook sb;
13. from b in bs from f in fs where b.price>f select SelectBook(\"select \" +
b.name,b.price,f) : sb {
14. }
15. }
16. }