1

カスタム OutputAttributeProcessor の作成についていくつか質問があります。私は WSO2 CEP 2.1.0 と siddhi 1.1.0 を使用しています。

カスタム OutputAttributeProcessor を作成したいので、2 つの Java クラスを作成します。TestFactory は OutputAttributeProcessorFactory を実装し、Test は OutputAttributeProcessor を実装します。2 つのクラスのパッケージは org.wso2.siddhi.extention です。

TestFactory は createAggregator と getProcessorType をオーバーライドする必要があり、Test は createNewInstance、getType、processInEventAttribute、および processRemoveEventAttribute をオーバーライドする必要があります。

最初の質問は、それぞれの方法についてです。

getProcessorType には何を書くべきですか?

また、processInEventAttribute と processRemoveEventAttribute の違いは何ですか?

さらに、もう一つ質問があります。2 つの 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 に対してイベントを追加および削除するために使用される 2 つのメソッドです。たとえば、平均を取る場合、動的に変化する特定のイベント セット (スライディング ウィンドウなど、通常はこれまでに受信したすべてのイベントではない) に対して実行する必要があります。したがって、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
于 2013-11-07T05:54:23.827 に答える