1

我对编写自定义 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 文件。我将 jar 文件添加到 /repository/components/lib 的类路径中,并将 TestFactory 的完全限定类名添加到位于 /repository/conf/siddhi 的 siddhi.extension 文件中。

siddhi.extension 的内容是什么?

下面是一行吗?

org.wso2.siddhi.extention.TestFactory

如果有关于自定义 OutputAttributeProcessor 的示例程序,请教我。

先感谢您。

4

1 回答 1

0

getProcessorType 应该写什么?

根据用例,您可以在此处返回 AGGREGATOR 或 CONVERTER 类型之一:

@Override
public ProcessorType getProcessorType() {
    return OutputAttributeProcessorFactory.ProcessorType.AGGREGATOR;
}

你的用例到底是什么?顾名思义,如果它进行聚合,您可以使用 AGGREGATOR 类型(例如计算平均值、取多个事件的 min() 等)

还有,processInEventAttribute 和 processRemoveEventAttribute 有什么不同?

这是用于在 OutputAttributeProcessor 中添加和删除事件的两种方法。例如,如果您要取平均值,则需要针对一组特定的事件(如滑动窗口,通常不是到目前为止收到的所有事件)进行平均,这些事件是动态变化的。因此,当您通过 processInEventAttribute() 收到事件时,您可以更新包括该事件在内的平均值。同样,当调用 processRemoveEventAttribute() 时,您可以更新删除该事件的平均值。例如,请参见下面的代码示例,该示例将平均值计算为双精度值。

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
于 2013-11-07T05:54:23.827 回答