【问题标题】:wso2: cep: siddhi: how to make time windows persistentwso2:cep:siddhi:如何使时间窗口持久化
【发布时间】:2013-12-03 10:17:42
【问题描述】:

我们目前正在测试 siddhi wso2 cep。

我们需要能够重新启动 wso2 服务器进程,而不会丢失已在窗口(例如时间窗口)中累积的数据。

有没有办法让时间窗口持久化,这样服务器就可以在不丢失状态的情况下重新启动?

我们是否必须配置服务器以使用持久性?

或者我们只需要调整查询并使用事件表?

这里是我们的查询示例:

from every data= DataInStream[state == 1] -> 
   every event = EventInStream[event.no == data.no] within 24h
       insert into duplicatesOutStream data.id as id

【问题讨论】:

    标签: wso2 complex-event-processing siddhi


    【解决方案1】:

    您可以通过启用快照使 CEP 保持其状态。文档可以是found here。但请注意,这将“定期”(可在几分钟内配置)保持 CEP 的“整个状态”。由于这只是定期进行,因此您可能会丢失最后一次快照操作后到达的最新事件。如果您希望 cep 在崩溃后恢复,这是最简单的选择。

    除此之外,没有其他方法可以使预定义的窗口持久化。但是,如果您愿意,您可以编写自己的自定义时间窗口 (documentation),它将执行持久性并将其插入 CEP。

    您也可以改用事件表。当您使用事件表时,您可以确保所有到达的事件都被持久化。 (但这种方法的一个缺点是,与 windows + 快照方法相比,这可能会影响性能)。

    【讨论】:

    • 我已经能够激活 cassandra 并因此保持存储桶状态。我们现在遇到的问题是,当使用 cntrl-c 关闭服务器或使用 yajsw 包装时,关闭挂钩会并行执行,并且 cassandra 在状态保持之前关闭。有没有办法从某个静态方法或通过关闭端口(类似于 tomcat)调用 shutdownGracefully ?
    • 有两种方式可以正常关闭基于 wso2carbon 的服务器: 1. 从终端 - 打开另一个终端,切换到 /bin 并运行命令 ./wso2server.sh -stop 2.您也可以从 web ui(管理控制台)关闭
    • 谢谢。为了彻底关闭 wso2 服务器,我在 yajsw wrapper.conf 中添加了以下内容:wrapper.app.shutdown.script=${wrapper_home}/scripts/wso2_shutdown.gv 当 wso2 从 yajsw 接收到停止命令时,将调用 groovy 脚本。脚本在 mbean 服务器上调用 shutdownGracefully:import javax.management.* servers = MBeanServerFactory.findMBeanServer(null) beanName = "org.wso2.carbon:type=ServerAdmin" servers.each(){try{new GroovyMBean(it, beanName).shutdownGracefully()} catch (Exception ex){println ex}}
    • 我会将此脚本和 wso2 配置添加到下一个 yajsw 版本的示例中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多