如果您要将消息流的处理与其他资源进行协调,则必须配置消息流内节点的属性以及消息流本身的属性。
在单个事务内执行协调的消息流,该事务在由输入节点接收消息时开始,并可以在全部处理完成时落实或回滚。您也可控制与数据库进行交互的节点处理数据库错误的方式。
要配置消息流和节点:
您可将事务属性设置为以下值:
如果要协调消息流的所有处理,则必须选择该值。
如果定义了多个 ODBC 连接,则可能会遇到数据库锁定问题。 特别是,如果具有自动事务状态的节点执行如 INSERT 或 UPDATE 之类的操作时,会导致数据库对象(例如,表)被锁定,并且当后续节点试图使用不同的 ODBC 连接来访问该数据库对象时,会发生无限锁定(死锁)。
第二个节点等待由第一个节点获取的锁定被释放,但在消息流完成之前第一个节点不会落实其操作并释放锁定;这永远不会因为第二个节点正在等待第一个节点的数据库锁定被释放而发生。
任何 DBMS 自动死锁避免例程都检测不出这种情况,因为使用代理时这两项操作会间接互相干扰。
有两种方法可避免此类锁定问题:
有关特定操作锁定哪些数据库对象、如何配置数据库的锁定超时参数的信息,请参阅您的数据库产品文档。
下表总结了响应输入和输出节点的特定属性设置而采用的操作。
每个输入节点的缺省值为是,这表示入局消息在同步点下处理。此外,在同步点下传递发送到输出节点的消息。如果输出节点是 MQOutput 或 MQReply 节点(都具有事务方式属性),则可以更改该行为。
如果您在输入节点上将事务方式设置为自动,则仅当入局消息定义为持久时才在同步点下处理它们。发送到 MQOutput 节点的消息都在同步点下传递,除非您明确在 MQOutput 节点中更改了事务方式。
在 z/OS 上,事务总是全局协调的。忽略消息流的 coordinatedTransaction 属性的设置。协调总是由 RRS 提供的。