1

(私はエスパーからシッディにジャンプしています)

同じストリームに複数のクエリを展開しようとしています。ここの例https://docs.wso2.com/display/CEP400/Using+Siddhi+as+a+Libraryは、1 つの ExecutionPlan でまとめてストリームにクエリをデプロイする方法を示しています。では、クエリを同じ実行プラン、つまり同じストリームに追加したい場合はどうすればよいでしょうか?

これを文法的に Java コードで行うことに興味があります。

アップデート

既存の実行計画にクエリを追加したいと考えています。これは、ストリームが到着する前ではなく、ストリームが到着している間を意味します。回答として投稿された例を使用:

SiddhiManager siddhiManager = new SiddhiManager();

String executionPlan = "" +
                       "@Plan:name('demo') " +
                       "" +
                       "define stream cseEventStream (symbol string, price float, volume long);" +
                       "" +
                       "from cseEventStream[symbol==\"WSO2\"] " +
                       "insert into wso2Stream;" +
                       "" +
                       "from cseEventStream[symbol==\"ABC\"] " +
                       "insert into abcStream;";

ExecutionPlanRuntime executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);

StreamCallback streamCallback = new StreamCallback() {
    @Override
    public void receive(Event[] events) {
        EventPrinter.print(events);
    }
};

executionPlanRuntime.addCallback("wso2Stream", streamCallback);
//Similarly, we can add another call back for abcStream

streamCallback.startProcessing();

InputHandler inputHandler = executionPlanRuntime.getInputHandler("cseEventStream");

executionPlanRuntime.start();
// HERE: ADD new query <---------------------------------------------
inputHandler.send(new Object[]{"WSO2", 700f, 100l});
inputHandler.send(new Object[]{"ABC", 60.5f, 200l});
inputHandler.send(new Object[]{"WSO2", 60.5f, 200l});

streamCallback.stopProcessing();
executionPlanRuntime.shutdown();  
4

1 に答える 1