我有一些关于编写自定义OutputAttributeProcessor的问题。 我使用WSO2 CEP 2.1.0和siddhi 1.1.0。
我想创建一个自定义的OutputAttributeProcessor,所以我创建了两个java类,TestFactory实现了OutputAttributeProcessorFactory,Test实现了OutputAttributeProcessor。 两个类的包是org.wso2.siddhi.extention。
TestFactory必须覆盖createAggregator和getProcessorType,Test必须覆盖createNewInstance,getType,processInEventAttribute和processRemoveEventAttribute。
第一个问题是关于每种方法。
应该用getProcessorType写什么?
还有,processInEventAttribute和processRemoveEventAttribute之间有什么不同?
此外,我还有一个问题。 我将创建两个java类的jar文件consits。 我将jar文件添加到/ repository / components / lib的类路径,将TestFactory的完全限定类名添加到位于/ repository / conf / siddhi的siddhi.extension文件中。
siddhi.extension的内容是什么?
以下是一行吗?
org.wso2.siddhi.extention.TestFactory
如果有关于自定义OutputAttributeProcessor的示例程序,请教我。
提前谢谢。
答案 0 :(得分:0)
应该用getProcessorType写什么?
根据用例,您可以在此处返回AGGREGATOR或CONVERTER类型之一:
@Override
public ProcessorType getProcessorType() {
return OutputAttributeProcessorFactory.ProcessorType.AGGREGATOR;
}
您的用例究竟是什么?顾名思义,如果它进行聚合,你可以使用AGGREGATOR类型(例如计算平均值,取几个事件的min()等等。)
还有,processInEventAttribute和processRemoveEventAttribute之间有什么不同?
这两种方法用于向/从OutputAttributeProcessor添加和删除事件。例如,如果您采用平均值,则需要针对特定的一组事件(如滑动窗口,通常不是到目前为止收到的所有事件)进行动态更改。因此,当您通过processInEventAttribute()收到事件时,您可以更新包含该事件的平均值。类似,当调用processRemoveEventAttribute()时,您可以更新平均删除该事件。 例如,请参阅下面的代码示例,该示例将平均值计算为double值。
private double value = 0.0;
private long count=0;
public Attribute.Type getType() {
return Attribute.Type.DOUBLE;
}
@Override
public Object processInEventAttribute(Object obj) {
count++;
value += (Double) obj;
if (count == 0) {
return 0;
}
return value / count;
}
@Override
public Object processRemoveEventAttribute(Object obj) {
count--;
value -= (Double) obj;
if (count == 0) {
return 0;
}
return value / count;
}
siddhi.extension的内容是什么?
正如你所提到的,这只是一行。只是完全限定的类名。
org.wso2.siddhi.extention.TestFactory