关于编写自定义OutputAttributeProcessor

时间:2013-11-06 15:03:38

标签: wso2 complex-event-processing wso2cep siddhi

我有一些关于编写自定义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的示例程序,请教我。

提前谢谢。

1 个答案:

答案 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