0

我有查询和执行计划,我想对其进行快照,以便我可以在接收方恢复它并再次开始执行它。

  1. 应该以什么格式发送给接收方?
  2. 如何在接收端恢复?

以下是我从 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();
4

1 回答 1

1

您可以使用PersistenceStore来保持执行计划的状态(快照)并在以后恢复它。请参考以下PersistenceTestCase以了解其用法。IE;

    // 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();
于 2017-05-30T16:32:00.400 回答