序列模式

序列规则是由序列模式定义的。它将检测某个时间间隔内是否到达了一系列特定事件。序列可有序,也可随机。序列规则为全状态规则。

概述

序列模式将检查某个时间段内的事件序列,并检测该 序列是否完整。不完整的序列是按指定序列包含一个或多个事件(但并非所有事件)的序列。

时间段由必需的时间窗口指示,该窗口使用规则语言中的 <timeWindow> 元素定义。序列中的每个事件由规则中单独的 <eventSelector> 元素来定义。可按以下任意顺序来 检测事件序列:
  • 按为规则编写 <eventSelector> 元素的顺序。在该情况下,当规则检测到由第 1 个 <eventSelector> 元素定义的事件时,将启动序列检测。 现在,规则将等待由第 2 个 <eventSelector> 元素定义的事件。
  • 按随机顺序。在该情况下,当规则检测到由 <eventSelector> 元素定义的任意一个 事件时,都将启动序列检测。 现在,规则将等待由 <eventSelector> 元素定义的另一个事件。
序列模式在下列主要方面不同于其他规则模式:
  • 它具有多个 <eventSelector> 元素用于定义由规则接受的事件。最少需要两个 <eventSelector> 元素。
  • 当事件符合由某个 <eventSelector> 元素定义的条件时,该 <eventSelector> 元素将被排除在该规则实例中的进一步事件处理之外。
  • <eventSelector> 元素中的别名属性仅在序列规则中有效,且该属性唯一地为序列规则中的特定事件选择器选择的事件命名。在过滤谓词或操作内的表达式中,可使用 act_eventList 变量来通过某个事件的别名在序列规则中访问该事件。

规则响应的运行条件

使用序列模式,规则响应将在以下时间 运行:
  • 在时间窗口中检测到完整事件序列时,如 <onDetection> 元素所定义。
  • 在时间窗口中一个或多个事件已到达而完整事件序列未到达时,如 <onTimeOut> 元素所定义。

    序列模式可用于检测给定的序列是否完整。例如,如果发生“系统关闭”事件而没有后续的“系统运行”事件,则规则编写者可编写 <onTimeOut> 操作以处理该类型的缺失事件。

此规则模式的示例用法

说明检测完整序列的场景:
假定在 IT 环境中,管理员希望了解 DB2® 堆大小的值是否正在影响 WebSphere® Application Server,如果是,则更正该问题。因此,如果在指定的时间段内按下列顺序发生以下事件,则管理员要增大 DB2 堆大小的值并重新启动数据库管理器:
  1. WebSphere Application Server 资源分配异常。假定这是 WASResourceAllocationException 类型的事件。
  2. DB2 错误消息,其内容为:“堆不足以处理语句”。假定这是 DB2NotEnoughHeap 类型的事件。
对于此场景,在序列规则中定义了 2 个 <eventSelector> 元素,且事件必须按编写 <eventSelector> 元素代码的顺序(而非随机顺序)到达。第 1 个 <eventSelector> 元素将检查事件 WASResourceAllocationException,第 2 个 <eventSelector> 元素将检查事件 DB2NotEnoughHeap。假定系统在指定的时间窗口中存在下列事件:
  1. WASResourceAllocationException
  2. DB2BackupStarted
  3. WASResourceAllocationException
  4. WASResourceAllocationException
  5. DB2NotEnoughHeap
规则行为如下:
  1. 接受第 1 个事件 WASResourceAllocationException。由于已符合第 1 个 <eventSelector> 元素 的条件,因此第 1 个 <eventSelector> 元素目前已被排除在该规则中的进一步事件处理之外。
  2. 忽略第 2 个事件 DB2BackupStarted
  3. 忽略第 3 个事件 WASResourceAllocationException
  4. 忽略第 4 个事件 WASResourceAllocationException
  5. 接受第 5 个事件 DB2NotEnoughHeap,并完成该序列。<onDetection> 规则响应操作将运行。该操作被定义为增大 DB2 堆大小的值并重新启动数据库管理器。规则将返回到它的初始状态。

    该规则现在将第 1 个 <eventSelector> 元素包含 到未来的事件处理中。

说明检测不完整序列的场景:
假定业务机构希望在接收到订单请求后的 1 小时内使所有的客户订单都可供货,并希望了解什么时候没有这样做到。
对于此场景,在序列规则中定义了 2 个 <eventSelector> 元素,且事件必须按编写 <eventSelector> 元素代码的顺序(而非随机顺序)到达。第 1 个 <eventSelector> 元素将检查事件 Netsales(带有 operationType=Order), 第 2 个 <eventSelector> 元素将检查事件 Netsales(带有 operationType=Delivery)。假定系统在指定的时间窗口(1 小时)中存在下列事件:
  1. Netsales 事件(带有 operationType=Order
  2. Netsales 事件(带有 operationType=Order
规则行为如下:
  1. 接受第 1 个事件。由于已符合第 1 个 <eventSelector> 元素 的条件,因此第 1 个 <eventSelector> 元素目前已被排除在该规则中的进一步事件处理之外。
  2. 忽略第 2 个事件。
  3. 因为在指定的时间窗口内没有接收到 Netsales 事件(带有 operationType=Delivery),所以将运行 <onTimeOut> 规则响应操作。此操作被定义为通知业务主管:未能在接收到订单请求后的 1 个小时内使客户订单可供货。规则将返回到它的初始状态。

    该规则现在将第 1 个 <eventSelector> 元素包含 到未来的事件处理中。

相关概念
访问与事件相关的信息
相关参考
序列规则摘要