我们有两种类型的事件 - InventoryEvent(Order) 和 InventoryEvent(Cancel)。我想在 6 秒内跟踪没有取消事件的订单事件。这是正在使用的查询
select a as InventoryEvent from pattern ["
+ " every a=InventoryEvent(system='Order') -> "
+ "("
+ "(timer:interval("
+ intervalSecs
+ " sec) and "
+ " not InventoryEvent(system='Cancel',keyValue('MessageKey')=a.keyValue('MessageKey')))"
+ ")]
时间间隔为 6 秒,订单事件和取消事件由一个公共消息键(订单 ID)连接
这在大多数情况下都非常有效,如下所示
- 订单事件(id1) --> 取消事件(id1) >6 秒
- 订单事件(id1) --> 取消事件(id1) <6 秒
- Order Events(id1) not --> Cancel Event in 6 secs
- 多个订单事件后跟取消事件
现在我们遇到了无法保证 order 和 cancel 事件发生的顺序的情况。所以我们有一个案例
- OE(id1) -->( 6secs ) OE(id2) -->(6secs) CE(id1) -->(6secs) CE(id2)。
基本上是两个订单事件,然后是两个取消事件,间隔为 6 秒。这也有效。现在我们将二阶事件的时间改为 4 秒而不是 6 秒,
- OE(id1) -->( 4secs ) OE(id2) -->(6secs) CE(id1) -->(6secs) CE(id2)。
对于二阶事件,它不会失败。不确定我们在查询方面缺少什么。
有谁知道为什么?