关于 DatabaseInput 节点样本

通过使用 DatabaseInput 节点,您可以创建消息流,这些消息流会对保存在数据库中的应用程序数据所发生的更改快速作出反应。此节点直接从数据库检索发生更新的数据。

下图显示了事件的序列。在应用程序数据表中引入更改后,触发器将受到触发,将使用足够的信息来填充事件表,以确定发生更改的行。

DatabaseInput 节点部署结构

此样本中使用的应用程序数据表的结构如下图所示:

带有客户和地址记录的样本应用程序数据表

例如,如果将条目插入客户表,那么在客户表和事件表中插入的行将如下表所示。

PKEY FIRSTNAME LASTNAME CCODE
cust1 Joe Bloggs sales

事件表

事件表是由用户创建的为应用程序表存储事件的数据库表,通常与这些应用程序表位于同一模式中。 事件表描述了对应用程序表所作更改的类型以及发生更改的行的标识。下表显示了事件表中一些典型列以及包括这些列的原因。

列名 列功能 示例值
EVENT_ID 必填。用于标识在任意给定时间进行处理的主键。 1
OBJECT_KEY 必填。在应用程序表中发生更改的行的识别元素,通常是主键列中的行的元素。 cust1
OBJECT_VERB 选填。所执行的更改,通常是 CREATE、UPDATE 或 DELETE 之一。此事件用于区分 DELETE 事件,因为在此情况下,应用程序表在流的消息构建时不包含要检索的行。 CREATE
OBJECT_NAME 选填。发生更改的应用程序表的名称。如果 DatabaseInput 节点用于支持多个应用程序表的更新,那么此列为必填的列。 客户
EVENT_PRIORITY 选填。事件的优先级,例如,此列可以用于确保优先级的值较高的事务的计算比较优先。 1
EVENT_TIME 选填。执行操作的时间。通常用于流的记录或性能监控。 2010-10-19T17:10:00
EVENT_STATUS 选填。用于确定此事件是否已处理。如果在处理后未对事件进行删除或归档,那么此列为必填的列。 0
EVENT_COMMENT 选填。自由格式字段,例如,如果处理后未删除事件,那么此列可以用于存储消息处理的结果。 已处理,但期间发生异常

注意:

以下是仅带有三列的基本事件表的示例。 对应用程序表执行添加操作将导致在事件表中出现以下新行:

EVENT_ID OBJECT_KEY OBJECT_VERB
1 cust1 CREATE

已创建主键为 cust1 的新客户。DatabaseInput 节点将对更改作出响应,并处理消息流中的新行。

完成时处理方式

流完成事件的处理后,将使用下列三种方式其中一种方式来完成处理:

  1. 删除事件。如果不想存储事件以供将来参考,请使用此选项。
  2. 更新状态列。如果想要对已处理的事件进行记录,且事件表有状态列 (EVENT_STATUS),请使用此选项。
  3. 将事件归档到另一个事件表。如果想要对事件进行记录,并使事件表的大小减到最小,请使用此选项。

此样本使用第一种方式,在成功完成后删除事件。

下列各节显示了有关消息流及其执行的处理的详细信息:

DatabaseInput 消息流

DatabaseInput 消息流将更改传递到数据库,将更改映射为输出消息格式并置于 WebSphere MQ 队列上:

DatabaseInput 消息流的截屏。

请注意,此流包括第二个 MQOutput 节点来捕获可能发生的异常。此操作将避免不必要的重试以及格式错误的 ESQL 或错误设置的数据库或表的重复处理。

测试脚本

此样本中使用了三个 SQL 脚本:

用于在数据库中插入行的脚本

INSERT INTO DBINPUT_CUSTOMER
      VALUES ('cust1', 'Fred', 'Flintstone', 'Dev');

用于在数据库中更新行的脚本

UPDATE DBINPUT_CUSTOMER SET FIRSTNAME = 'Barney', LASTNAME = 'Rubble' WHERE PKEY='cust1';

用于在数据库中删除行的脚本

DELETE FROM DBINPUT_CUSTOMER WHERE PKEY='cust1';

返回到样本主页