问题描述
Pattern<Event,?> pattern = Pattern.<Event>begin("start")
.next("middle").where(new SimpleCondition<Event>() {
@Override
public boolean filter(Event value) throws Exception {
return value.getName().equals("error");
}
}).followedBy("end").where(new SimpleCondition<Event>() {
@Override
public boolean filter(Event value) throws Exception {
return value.getName().equals("critical");
}
}).within(Time.seconds(10));
在此示例中,位于(Time.seconds(10))之内,
1,是否表示数据有效期为10秒?
2,到期数据是否会在10s后被删除?
3,如果我未在(Time.seconds(10))内进行设置,数据是否始终有效?数据不清晰?
4,如果我没有在(Time.seconds(10))内设置越来越多的数据,它是oom吗?如何保存数据?
感谢您的帮助^^
解决方法
使用within(Time.seconds(10))
意味着10秒内未完成的所有部分匹配都将被丢弃。否则,它们会一直保留到可能匹配的时间,根据模式(和数据流)的不同,它们可能永远存在。
您可以选择使用RocksDB状态后端,在这种情况下,状态保存在磁盘上,而不是内存中。但是,磁盘也是一种有限的资源。
如果您想捕获这些部分匹配,而不是在超时时简单地丢弃它们,则可以使用TimedOutPartialMatchHandler
来实现。有关更多详细信息,请参见Handling Timed Out Partial Patterns上的文档。