处理聚集流中的异常

当您使用聚集流时,可能会发现发生异常。本主题告诉您如何对它们进行处理。

开始之前:

要执行此任务,必须先完成下列任务:

处理异常

如果在 AggregateReply 节点的下游检测到错误,则代理抛出异常。消息流中的另一个节点还可能使用 ESQL THROW 语句抛出异常。无论哪种情况,抛出异常时,可以在以下两个位置中的一个捕获它:

  • 应答到达的输入节点
  • AggregateReply 节点

以下表列出了事件和 AggregateReply 节点的下游抛出的异常遇到的问题。

事件 传播的消息 输出终端 捕获异常
预期的应答到达输入节点并被传递到 AggregateReply 节点的 In 终端。它是完成聚集所需的最后应答。 聚集的应答消息包含所有应答 Out 输入节点
意外的应答到达输入节点并传递到 AggregateReply 节点。不会识别为有效应答,并且将未知消息超时属性设置为 0。 接收到的消息 Unknown 输入节点
由于用于聚集的所有应答都尚未到达,所以发生超时。 聚集的应答消息包含所有已经接收到的应答 Timeout AggregateReply 节点
由于所保留的消息未作为有效应答标识,发生未知超时。 保留的消息 Unknown AggregateReply 节点
发现要在最后的应答到达的其他时间完成的聚集。 聚集的应答消息包含所有应答 Out AggregateReply 节点

如果您要处理在聚集流中发生的错误,则必须在消息流中的每个节点的实例捕获这些异常。要执行该操作:

  1. 切换到“代理应用程序开发”透视图
  2. 打开您要使用的消息流。
  3. 如果您要自己处理这些异常,则将每个输入和 AggregateReply 节点的 catch 终端连接到处理已经发生的错误的一系列节点。

    如果您要使用统一的方法进行错误处理,请将所有这些节点的 catch 终端连接到一个单一节点序列,或创建以单一一致的方式处理错误的子流并将该子流连接到每个 catch 终端。

  4. 如果您希望代理使用缺省的错误处理方法来处理这些异常,则不要连接这些节点的 catch 终端。
如果您连接了 AggregateReply 节点的 catch 终端,并要把通过此终端传播的消息输出到某个目标(以后处理该消息时可以从该目标中检索它),则必须在 catch 流中包含一个 Compute 节点来提供任何特定于传输的处理。例如,如果要把消息从 MQOutput 节点放至 WebSphere MQ 队列,则必须添加 MQMD 头。

下面的 ESQL 示例显示了您可以如何添加 MQMD 头并传递 AggregateReply 节点接收的应答:

-- Add MQMD
  SET OutputRoot.MQMD.Version = 2;
  .
  -- Include consolidated replies in the output message
  SET OutputRoot.XML.Data.Parsed = InputRoot.ComIbmAggregateReplyBody;
  .

如果要传播关于输出消息中异常的信息,还必须将 Compute 节点的计算方式属性设置为包含异常的值。

声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac12340_