在 Esper CEP 运行时更改 EPL 语句
Changing the EPL Statement at Runtime in Esper CEP
目前我在Java环境中使用Esper 8来使用CEP。最近我问自己是否可以在运行时更改 EPL 语句。例如,如果您有一个 Esper CEP 运行 一个 EPL 语句,并且您希望在不中断 CEP 运行时的情况下更改此 EPL 语句。因此,EPL 语句每 x 分钟更新一次 SQL 查询,使用新的 EPL 语句或相同语句。这甚至可能吗,还是我必须中断我的 Java 运行时,更改 EPL 语句并在每次更改 EPL 语句时重新启动 CEP?
也许这个问题听起来很愚蠢,但我对 Esper CEP 还不是很了解。
提前致谢
Esper 允许您更改语句集,但不能更改单个语句。换句话说,您可以随心所欲地部署(创建 EPL 语句)和取消部署(删除 EPL 语句),即时 运行,但是现有的 EPL 语句不可修改。监听器、订阅者、变量、脚本、服务等和扩展代码当然可以改变。
它不允许您更改语句的原因是语句可能而且经常确实有一些状态。就像说 select count(*) from Event
;这已经算作一个状态了。假设这将更改为 select count(*), avg(price) from Event
,现在选择计数和平均值,运行时实际上不会记住任何事件,因此无法追溯计算平均值。
澄清:"deploy" 和 "undeploy" 我并不是要部署和取消部署整个应用程序。我的意思是简单地创建一些新的 EPL 语句并在没有任何应用程序的情况下即时删除一些 EPL 语句 stop/start.
目前我在Java环境中使用Esper 8来使用CEP。最近我问自己是否可以在运行时更改 EPL 语句。例如,如果您有一个 Esper CEP 运行 一个 EPL 语句,并且您希望在不中断 CEP 运行时的情况下更改此 EPL 语句。因此,EPL 语句每 x 分钟更新一次 SQL 查询,使用新的 EPL 语句或相同语句。这甚至可能吗,还是我必须中断我的 Java 运行时,更改 EPL 语句并在每次更改 EPL 语句时重新启动 CEP? 也许这个问题听起来很愚蠢,但我对 Esper CEP 还不是很了解。
提前致谢
Esper 允许您更改语句集,但不能更改单个语句。换句话说,您可以随心所欲地部署(创建 EPL 语句)和取消部署(删除 EPL 语句),即时 运行,但是现有的 EPL 语句不可修改。监听器、订阅者、变量、脚本、服务等和扩展代码当然可以改变。
它不允许您更改语句的原因是语句可能而且经常确实有一些状态。就像说 select count(*) from Event
;这已经算作一个状态了。假设这将更改为 select count(*), avg(price) from Event
,现在选择计数和平均值,运行时实际上不会记住任何事件,因此无法追溯计算平均值。
澄清:"deploy" 和 "undeploy" 我并不是要部署和取消部署整个应用程序。我的意思是简单地创建一些新的 EPL 语句并在没有任何应用程序的情况下即时删除一些 EPL 语句 stop/start.