1

InventoryEvent(Order) と InventoryEvent(Cancel) の 2 種類のイベントがあります。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) -->( 6秒) OE(id2) -->(6秒) CE(id1) -->(6秒) CE(id2).

基本的に、2 つの注文イベントの後に、6 秒間隔で 2 つのキャンセル イベントが続きます。これも機能します。ここで、2 次イベントの時間を 6 秒ではなく 4 秒に変更します。

  • OE(id1) -->( 4秒) OE(id2) -->(6秒) CE(id1) -->(6秒) CE(id2).

2 次イベントでは失敗しません。クエリに関して何が欠けているのかわかりません。

誰かが理由を知っていますか?

4

1 に答える 1

0

順序を保証できない場合は、代わりに結合を使用するか、イベントを並べ替えます (並べ替えビューが役立ちます)。最初のシナリオでも id1 のパターン マッチは行われません。そうでない場合は、テスト ケースをユーザー メーリング リストに送信してください。

于 2012-10-11T20:53:50.760 に答える