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 次イベントでは失敗しません。クエリに関して何が欠けているのかわかりません。
誰かが理由を知っていますか?