代理对所有消息流提供基本错误处理。如果基本处理不能彻底解决,且您想对某些出错条件和情况执行特定操作,可增强消息流以提供自己的错误处理。例如,您可能想将消息流设计为,可预测您想以特殊方式处理的某些错误;或者在其他处理未能成功完成的情况下,可更新数据库并且必须将更新进行回滚。
您可用于该操作的选项在某些情况下相当复杂。提供给 MQInput 和 TimeoutNotification 节点的选项很多,因为这些节点处理的是持久消息和事务。MQInput 也受到 WebSphere MQ 配置选项的影响。
由于您决定以不同方式处理不同的错误,因此没有相关固定过程的描述。 本部分提供了有关错误处理的原则以及可用的选项,并且您必须根据本部分提供的详细信息来决定每种情况下所需要的选项组合。
您可在消息流中选择一个或多个选项:
如果您要将用户定义的节点包含在消息流里,则必须参考节点提供的信息,以了解如何处理这些节点中的错误。本部分中的描述仅涵盖内建节点。
当设计您的错误处理方法时,请考虑以下因素:
在节点内检测到异常时,消息和异常信息会传播到此节点的 failure 终端。如果节点没有 failure 终端或未连接 failure 终端,则代理会抛出一个异常并将控制权返回给可以处理此异常的前一个最近节点。可能是 TryCatch 节点、AggregateReply 节点或输入节点。
如果 MQinput 节点检测到内部错误,则它的行为会稍有不同;如果 failure 终端未连接,则此节点会试图将消息放入输入队列的回退重排队列,或(如果未定义此回退重排队列)放入代理队列管理器的死信队列。
仅当消息先在节点外部传播(例如,传播到已连接到 out 终端的节点),此消息才会传播到 catch 终端。
错误处理的一般原则为:
如果在 MQInput 节点(在 out 或 catch 流中)外生成异常,消息为事务性消息,以及在输入队列上复原消息导致计数回退以达到回退阈值,则也会调用 fail 流。
如果在节点外部生成异常并且您未连接 catch 终端,则 HTTPInput 和 SCADAInput 节点不会将消息传播到 failure 终端。
有关更多信息,请参阅以下主题:
如果消息流包含数据库更新,则您配置与那些数据库交互的节点的方式也会影响处理错误的方式:
有关协调数据库更新的更多信息,请参阅为协调消息流配置节点。
聚集的消息流还涉及本部分中未作讨论的其他注意事项;这些注意事项在处理聚集流中的异常进行了描述。
错误处理程序样本说明了如何使用错误处理例程以获取有关错误的信息,以及将该信息存储于数据库中。错误处理例程是您不用更改即可添加到任何消息流的子流。该样本还说明了如何配置消息流以控制事务状态;尤其是,使用全局协调事务来确保整个数据的完整性。