1

我们有两种类型的事件 - 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)。

对于二阶事件,它不会失败。不确定我们在查询方面缺少什么。

有谁知道为什么?

4

1 回答 1

0

如果您不能保证顺序,请改用连接或重新排序事件(有一个重新排序视图会有所帮助)。第一个场景也不会与 id1 进行模式匹配,如果您不这么认为,请向用户邮件列表提交一个测试用例。

于 2012-10-11T20:53:50.760 回答