我有查询和执行计划,我想拍摄快照,以便我可以在接收方恢复它并再次开始执行它。
以下是我从Siddhi存储库中获取的一些代码。
SiddhiManager siddhiManager = new SiddhiManager();
String query =
"define stream inStream(meta_roomNumber int,meta_temperature double);" +
"from inStream#window(10)[meta_temperature > 50]\n" +
"select *" +
"insert into outStream;";
ExecutionPlanRuntime executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(query);
executionPlanRuntime.start();
SiddhiContext siddhicontext = new SiddhiContext();
context.setSiddhiContext(siddhicontext);
context.setSnapshotService(new SnapshotService(context));
executionPlanRuntime.snapshot();
答案 0 :(得分:1)
您可以使用PersistenceStore
来保存执行计划的状态(快照),并在以后恢复。请参阅以下PersistenceTestCase以了解其用法。即;
// Create executionPlanRuntime
ExecutionPlanRuntime executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);
// Register Callbacks, InputHandlers
executionPlanRuntime.addCallback("query1", queryCallback);
stream1 = executionPlanRuntime.getInputHandler("Stream1");
// Start executionPlanRuntime
executionPlanRuntime.start();
// Send events
stream1.send(new Object[]{"WSO2", 25.6f, 100});
Thread.sleep(100);
stream1.send(new Object[]{"GOOG", 47.6f, 100});
Thread.sleep(100);
// Persist the state
executionPlanRuntime.persist();
// Shutdown the running execution plan
executionPlanRuntime.shutdown();
// Create new executionPlanRuntime
executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);
// Register Callbacks, InputHandlers
executionPlanRuntime.addCallback("query1", queryCallback);
stream1 = executionPlanRuntime.getInputHandler("Stream1");
// Start executionPlanRuntime
executionPlanRuntime.start();
// Restore to previously persisted state
executionPlanRuntime.restoreLastRevision();