我正在监视车辆的移动。每当他们进入或退出地理围栏时,都会触发一个事件。通过Flink,我想检查一辆车是否在围栏内至少两个小时。
这是我使用的模式:
begin("enter").notFollowedBy("exit").within(Time.hours(2)).followedBy("final-exit")
问题是:;输入";即使notFollowed";退出";为true,即如果车辆几天后返回并触发另一个退出围栏事件,则它将通过notFollowedBy规则并导致完全匹配。
有没有办法告诉Flink主动放弃部分匹配?
从逻辑上讲;输入";如果匹配后面不跟"0",则匹配保持有效;退出";在两天内,因为在这种情况下;退出";两小时内。你能描述一下在什么情况下你希望这样的部分比赛暂停吗?例如,如果你想让它在8小时后超时,那么我认为这种行为可以用来描述
begin("enter")
.notFollowedBy("exit").within(Time.hours(2))
.followedBy("final-exit").within(Time.hours(8))
更新
如果你的目标是过滤掉车辆在2小时内进出地理围栏的所有情况,然后正确处理剩余事件,那么你可以运行一个分为两个阶段的管道。第一阶段可以描述为
begin("enter")
.followedBy("quick-exit").within(Time.hours(2))
然后,您可以删除与此模式匹配的事件,并对那些超时的事件进行进一步处理。有关如何使用processTimedOutMatch
捕获和发出超时部分模式的详细信息,请参阅处理超时部分模式,这将是您需要考虑进行进一步处理的部分模式。