gpt4 book ai didi

java - 使用 Esper,如何对事件进行动态过滤?

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:49 25 4
gpt4 key购买 nike

我是 Java 中使用 Esper 事件流引擎的新手。场景是事件作为 POJO 传入。他们有一个我想过滤的字段。过滤后的值会随时间变化。我不希望每次发生更改时都删除并插入新语句。

例子:

事件名为“MyEvent”,并具有字段“source”。值可以是“”、“工作”或“学校”之一。Web 服务允许用户更改他们感兴趣的“source”的值。EPL 语句看起来像

select * from MyEvent where source in ( 'home', 'school' )

所以在任何时候,“学校”都可能被删除,影响必须尽快反射(reflect)出来。问题是,如何最好地实现这一目标?由于更新生效之间的延迟,我已经排除了缓存数据库调用。

想法是:

1) 有一个名为“SourcesOfInterest”的流,其中包含类型为 List 的“sources”字段,并将语句更改为:

select * from MyEvent where source in (SourcesOfInterest.win:length(1).sources)

Web 服务将“SourcesOfInterest”事件插入到此流中,其中只会查看最近的事件。甚至不确定语法是否正确。

2) 让语句引用一个运行时变量。那么声明将是:

select * from MyEvent where source in ( mySourcesVariable )

网络服务将调用

EPRuntime.setVariableValue( "mySourcesVariable", myArrayOfSources )

还有其他选择吗?其中任何一个的性能问题?

最佳答案

经过一番挣扎,我在问题中使用了第二个想法。

需要在配置中设置的变量,在启动之前,使用

Set<String> mySetOfValues = new HashSet<String>();

esperConfiguration.addVariable( mySourcesVariable, Set.class, mySetOfValues );

Web 服务按照描述的方式工作,使用的是 Set 而不是数组。

现在一切都很好,性能也不是很差,所以我要继续了。

关于java - 使用 Esper,如何对事件进行动态过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com