以下代码存在问题。在A增加或减少之前....最终陈述被执行。为什么会发生这种情况..我们如何管理语句的执行顺序。
create variable Integer A=0;
on pattern[every a=EventCreated(a.type ='C')]
set A= A+1;
on pattern[every a=EventCreated(a.type ='EOD')]
set A= A-1;
select
"R" as type,
"R" as text,
e.time as time,
e.source as source
from EventCreated e where A=0 ;
答案 0 :(得分:1)
从技术上讲,第一个语句的输入也适用于最后一个语句,这就是为什么esper首先触发最后一个语句的原因。
您可以使用注释@Priority
强制esper优先处理您的第一个语句的优先级@Priority(1)
@Name("ReplaceCarCounterAdd")
on pattern[every a=EventCreated(a.type ='Charging')]
set ReplaceCar = ReplaceCar+1;
首先执行最高优先级,默认情况下,所有语句都为零。有了这个改变,它应该有效,因为当触发最后一个语句时,变量不再是0。
esper中的文档: http://esper.espertech.com/release-7.1.0/esper-reference/html/epl_clauses.html#epl-syntax-annotation