序列型樣

序列規則是由序列型樣來定義。此規則會偵測在時間間隔內是否有某個事件序列到達。序列可以是依序的,也可以是隨機的。序列規則是有狀態的規則。

概觀

序列型樣會檢查一段時間內的事件序列, 並偵測序列是完整的還是不完整的。不完整的序列包含指定序列的一或多個事件,但並非所有的事件。

時段是由必要的時間範圍來指示, 如規則語言中的 <timeWindow> 元素所定義。序列中的每個事件都是由規則中個別的 <eventSelector> 元素來定義。偵測到的事件序列可能會具有下列其中一種次序:
  • 在規則中編碼 <eventSelector> 元素的次序。在此情況下,當規則偵測到第一個 <eventSelector> 元素所定義的事件時,會啟動序列偵測。此時,規則會等待第二個 <eventSelector> 元素定義的事件。
  • 隨機次序。在此情況下,當規則偵測到 <eventSelector> 元素所定義的任何一個事件時,就會啟動序列偵測。此時,規則會等待 <eventSelector> 元素定義的另一個事件。
序列型樣不同於其他規則型樣,主要差異如下:
  • 它使用多個 <eventSelector> 元素來定義規則接受的事件。它至少需要兩個 <eventSelector> 元素。
  • 當事件符合其中一個 <eventSelector> 元素所定義的準則時,就會在該規則實例的進一步事件處理程序中,將該 <eventSelector> 元素排除在外。
  • <eventSelector> 元素上的 alias 屬性僅在序列規則內有效,而且它會將特定事件選擇器在序列規則中所選取的事件命名為唯一的名稱。在過濾述語或動作內的表示式中,您可以使用 act_eventList 變數,依別名來存取序列規則中的事件。

執行規則回應的條件

使用序列型樣,規則回應就會在下列時間執行:
  • 在時間範圍內偵測到完整的事件序列時,如 <onDetection> 元素所定義。
  • 在時間範圍內有一或多個事件到達但不是完整的序列時,如 <onTimeOut> 元素所定義。

    序列型樣可用來偵測給定的序列是否不完整。比方說,如果「系統關閉」事件發生後沒有發生後續的「系統啟動」事件,規則撰寫者可以編碼 <onTimeOut> 動作,以處理此類型的遺漏事件。

此規則型樣的範例用法

說明偵測完整序列的實務範例:
假設在 IT 環境中,管理者想要瞭解 DB2® 資料堆大小的值是否會影響 WebSphere® Application Server,如果會,則要更正此問題。因此,如果在指定的時段內發生下列事件且次序如下, 則管理者會想要增加 DB2 資料堆大小的值,並重新啟動資料庫管理程式:
  1. WebSphere Application Server 資源配置異常。假設此為 WASResourceAllocationException 類型的事件。
  2. DB2 錯誤訊息顯示: "沒有足夠的資料堆可處理陳述式"。假設此為 DB2NotEnoughHeap 類型的事件。
針對此實務範例,在序列規則中定義兩個 <eventSelector> 元素, 且事件必須依照編碼 <eventSelector> 元素的次序 (而不是隨機次序) 到達。第一個 <eventSelector> 元素 檢查事件 WASResourceAllocationException, 而第二個 <eventSelector> 元素則檢查事件 DB2NotEnoughHeap。 假設會在指定的時間範圍內將下列事件呈現給系統:
  1. WASResourceAllocationException
  2. DB2BackupStarted
  3. WASResourceAllocationException
  4. WASResourceAllocationException
  5. DB2NotEnoughHeap
規則行為如下所示:
  1. 接受第一個事件 WASResourceAllocationException。 因為符合第一個 <eventSelector> 元素的準則, 所以現在會在此規則的進一步事件處理程序中,將第一個 <eventSelector> 元素排除在外。
  2. 忽略第二個事件 DB2BackupStarted
  3. 忽略第三個事件 WASResourceAllocationException
  4. 忽略第四個事件 WASResourceAllocationException
  5. 接受第五個事件 DB2NotEnoughHeap,並完成序列。<onDetection> 規則回應動作會執行。定義此動作,以增加 DB2 資料堆大小的值,並重新啟動資料庫管理程式。 規則回到起始狀態。

    現在,此規則會在進一步事件處理程序中包括第一個 <eventSelector> 元素。

說明偵測不完整序列的實務範例:
假設企業組織要在收到訂單要求的 1 個小時之內,準備好訂單交付給客戶,並且想要在未完成時獲得通知。
針對此實務範例,在序列規則中定義兩個 <eventSelector> 元素, 且事件必須依照編碼 <eventSelector> 元素的次序 (而不是隨機次序) 到達。第一個 <eventSelector> 元素檢查 operationType=OrderNetsales 事件,而第二個 <eventSelector> 元素則檢查 operationType=DeliveryNetsales 事件。假設會在指定的 1 小時時間範圍內將下列事件呈現給系統:
  1. operationType=OrderNetsales 事件
  2. operationType=OrderNetsales 事件
規則行為如下所示:
  1. 接受第一個事件。因為符合第一個 <eventSelector> 元素的準則, 所以現在會在此規則的進一步事件處理程序中,將第一個 <eventSelector> 元素排除在外。
  2. 忽略第二個事件。
  3. 因為 operationType=DeliveryNetsales 事件未在指定時間範圍內接收,<onTimeOut> 規則回應動作即會執行。定義此動作,以通知業務專員,在收到訂單要求的 1 個小時內尚未準備好訂單交付給客戶。 規則回到起始狀態。

    現在,此規則會在進一步事件處理程序中包括第一個 <eventSelector> 元素。

相關概念
存取事件相關資訊
相關參考
序列規則摘要