为协调消息流配置节点

如果您要将消息流的处理与其他资源进行协调,则必须配置消息流内节点的属性以及消息流本身的属性。

开始之前:

在单个事务内执行协调的消息流,该事务在由输入节点接收消息时开始,并可以在全部处理完成时落实或回滚。您也可控制与数据库进行交互的节点处理数据库错误的方式。

要配置消息流和节点:

  1. 切换到“代理应用程序开发”透视图
  2. 打开您要使用的消息流,或创建新消息流。
  3. 如果以下节点在该消息中显示,则为节点设置事务属性:
    • Compute
    • Database
    • DataDelete
    • DataInsert
    • DataUpdate
    • Filter
    • Mapping
    • Warehouse

    您可将事务属性设置为以下值:

    自动
    任何由节点执行的更新、删除和添加操作都会在消息流处理完成时得以落实或回滚。如果消息流成功完成,则落实所有更改。如果消息流未成功完成,则回滚所有更改。

    如果要协调消息流的所有处理,则必须选择该值。

    落实
    所执行的操作取决于部署消息流的系统:
    • 在分布式系统上,落实迄今在消息流中已对数据源进行的任何操作(包括任何在节点中进行的操作),而不管消息流以后成功与否。
      注: 在非 z/OS 平台上,单个的关系数据库可以但也有可能无法支持这种操作。
    • 在 z/OS 上,落实在此节点中所执行的操作,而不管消息流以后成功与否。不落实任何在该节点之前于自动事务性情况下执行的操作,但会保留在工作单元中,然后会根据消息流是否成功再进行落实或回滚。
    如果要使节点在同一个消息流(其中,这些节点在相同外部数据库内操作)中同时处于自动落实事务状态,您必须使用独立 ODBC 连接:一个用于在消息流完成前不会进行落实的节点,一个用于将立即执行落实的节点。如果未执行该操作,将立即执行落实的节点也会落实由先前的自动节点执行的所有操作。
    注: 在非 z/OS 平台上,单个的关系数据库可以但也有可能无法支持这种操作。

    如果定义了多个 ODBC 连接,则可能会遇到数据库锁定问题。 特别是,如果具有自动事务状态的节点执行如 INSERT 或 UPDATE 之类的操作时,会导致数据库对象(例如,表)被锁定,并且当后续节点试图使用不同的 ODBC 连接来访问该数据库对象时,会发生无限锁定(死锁)。

    第二个节点等待由第一个节点获取的锁定被释放,但在消息流完成之前第一个节点不会落实其操作并释放锁定;这永远不会因为第二个节点正在等待第一个节点的数据库锁定被释放而发生。

    任何 DBMS 自动死锁避免例程都检测不出这种情况,因为使用代理时这两项操作会间接互相干扰。

    有两种方法可避免此类锁定问题:

    • 设计您的消息流,以使未落实的(自动)操作不会锁定后继操作(使用不同 ODBC 连接)需访问的数据库对象。
    • 配置数据库的锁定超时参数,以使指定时间段过后不会尝试获取锁定。如果因锁定超时而使数据库操作失败,则会抛出异常,表示代理以常规方式处理。

    有关特定操作锁定哪些数据库对象、如何配置数据库的锁定超时参数的信息,请参阅您的数据库产品文档。

  4. 如果以下节点在该消息中显示,则为节点设置事务方式属性:
    • MQInput
    • MQOutput
    • MQReply
    • SCADAInput
    • JMSInput 节点
    • JMSOutput 节点

    下表总结了响应输入和输出节点的特定属性设置而采用的操作。

    消息持久性 a Input 节点事务方式 MQOutput 或 MQReply 节点事务方式 消息流是否为全局协调的?
    自动
    自动
    自动
    自动
    自动 自动
    自动 自动
    任何 b 任何 b
    任何 b 任何 b
    注:
    1. 仅对跨越 WebSphere MQ 企业传输方式WebSphere MQ 移动传输方式WebSphere MQ 遥感传输方式协议接收的消息,持久性才相关。
    2. MQOutput 或 MQReply 节点属性设置覆盖此处设置的值。
    3. JMSInput 和 JMSOutput 节点的“事务方式”设置与上表设置不同。有关信息,请参阅 JMSInput 节点JMSOutput 节点

    每个输入节点的缺省值为,这表示入局消息在同步点下处理。此外,在同步点下传递发送到输出节点的消息。如果输出节点是 MQOutput 或 MQReply 节点(都具有事务方式属性),则可以更改该行为。

    如果您在输入节点上将事务方式设置为自动,则仅当入局消息定义为持久时才在同步点下处理它们。发送到 MQOutput 节点的消息都在同步点下传递,除非您明确在 MQOutput 节点中更改了事务方式

  5. 为每个访问数据库的节点设置将警告作为错误处理在数据库出错时抛出异常以表示您要该节点处理数据库警告和错误。 是否选择这些属性以及如何连接节点的 failure 终端也会影响落实或回滚数据库更新的方式。
  6. 切换到“代理管理”透视图
  7. 将消息流添加到代理归档。
  8. 在代理归档编辑器视图下面选择“配置”选项卡并选择消息流。 这显示在代理归档内消息流的可配置属性。选中复选框 coordinatedTransaction 将消息流按全局协调配置。

    在 z/OS 上,事务总是全局协调的。忽略消息流的 coordinatedTransaction 属性的设置。协调总是由 RRS 提供的。

相关概念
消息流概述
消息流事务
相关任务
从消息流访问数据库
配置协调的消息流
处理消息流中的错误
编辑可配置的属性
相关参考
受支持的数据库
内置节点
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac00393_