我刚刚开始测试WSO2 CEP。我使用的是3.1.0版本。
我使用单个属性事件和非常简单的查询完成了第一次成功的测试。 但不,我试图让测试更加真实,并为我的事件添加更多属性,以及更复杂的查询。执行计划XML文件副本位于我的消息末尾。
我不明白为什么查询中的“insert into so”语句会产生错误消息,说明输出流定义了两次。实际上,流是出口的。
当我删除“insert into so”时,计划已部署,但没有事件发生......
知道我没有按预期做什么吗?
感谢您的帮助。
问候。
XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<executionPlan name="Fifi_Test_Execution_Plan_1" statistics="enable"
trace="enable" xmlns="http://wso2.org/carbon/eventprocessor">
<description/>
<siddhiConfiguration>
<property name="siddhi.persistence.snapshot.time.interval.minutes">0</property>
<property name="siddhi.enable.distributed.processing">false</property>
</siddhiConfiguration>
<importedStreams>
<stream as="si" name="Fifi_Test_Event_Stream_1" version="1.0.0"/>
</importedStreams>
<queryExpressions><![CDATA[
from si#window.timeBatch(10 sec)
select code, count(code) as number, sum(value) as total
group by code
insert into so;
]]></queryExpressions>
<exportedStreams>
<stream name="Fifi_Test_Event_Stream_2" valueOf="so" version="1.0.0"/>
</exportedStreams>
</executionPlan>
错误消息:
Exception: Invalid query specified, Stream so is already defined as StreamDefinition{streamId='so', attributeList=[Attribute{name='code', type=STRING}, Attribute{name='number', type=LONG}, Attribute{name='total', type=INT}]}, hence cannot define StreamDefinition{streamId='so', attributeList=[Attribute{name='code', type=STRING}, Attribute{name='number', type=LONG}, Attribute{name='total', type=LONG}]}
答案 0 :(得分:0)
上述问题的原因仅通过例外表达。以下是该问题的更详细原因..
我认为,最初您已经创建了一个执行计划,该计划将事件导出为流“Fifi_Test_Event_Stream_2”。此流包含以下属性
attributeList = [Attribute {name ='code',type = STRING},Attribute {name ='number',type = LONG},Attribute {name ='total',type = INT}]
但是,现在你已经编写了另一个查询来计算总和,在计算总和后,你将这些事件导出到同一个流“Fifi_Test_Event_Stream_2”(流“so”只是流“Fifi_Test_Event_Stream_2”的别名)。
由于您正在计算总和,因此导出的流包含以下类型的属性
[属性{name ='code',type = STRING},属性{name ='number',type = LONG},属性{name ='total',type = LONG}]
然后,您无法将这些事件转发到流“Fifi_Test_Event_Stream_2”..