Esper - 处理随机事件序列,后跟模式 - >

时间:2012-10-05 18:12:31

标签: esper

我们有两种类型的事件 - 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秒
  • 订单活动(id1)不是 - >在6秒内取消活动
  • 多个订单事件,然后是取消事件

现在我们有一些场景,我们无法保证订单和取消事件的顺序。所以我们有一个案例

  • 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)。

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

有谁知道为什么?

1 个答案:

答案 0 :(得分:0)

如果您无法保证订单,请使用连接或重新排序事件(有一个帮助的重新排序视图)。 第一个场景也不会与id1进行模式匹配,如果您不这么认可,请将测试用例提交给用户邮件列表。