如果在 AggregateReply 节点的下游检测到错误,则代理抛出异常。消息流中的另一个节点还可能使用 ESQL THROW 语句抛出异常。无论哪种情况,抛出异常时,可以在以下两个位置中的一个捕获它:
以下表列出了事件和 AggregateReply 节点的下游抛出的异常遇到的问题。
事件 | 传播的消息 | 输出终端 | 捕获异常 |
---|---|---|---|
预期的应答到达输入节点并被传递到 AggregateReply 节点的 In 终端。它是完成聚集所需的最后应答。 | 聚集的应答消息包含所有应答 | Out | 输入节点 |
意外的应答到达输入节点并传递到 AggregateReply 节点。不会识别为有效应答,并且将未知消息超时属性设置为 0。 | 接收到的消息 | Unknown | 输入节点 |
由于用于聚集的所有应答都尚未到达,所以发生超时。 | 聚集的应答消息包含所有已经接收到的应答 | Timeout | AggregateReply 节点 |
由于所保留的消息未作为有效应答标识,发生未知超时。 | 保留的消息 | Unknown | AggregateReply 节点 |
发现要在最后的应答到达的其他时间完成的聚集。 | 聚集的应答消息包含所有应答 | Out | AggregateReply 节点 |
如果您要处理在聚集流中发生的错误,则必须在消息流中的每个节点的实例捕获这些异常。要执行该操作:
下面的 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 节点的计算方式属性设置为包含异常的值。