(私はエスパーからシッディにジャンプしています)
同じストリームに複数のクエリを展開しようとしています。ここの例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();