在多个接收位置上接收 Oracle 数据库更改通知

假设有这样一种情况:将多个接收位置创建为不同 BizTalk 应用程序的一部分,配置为接收同一表的查询通知 (例如同一数据库中的 ACCOUNTACTIVITY) 。 如果在同一表中插入了一百条记录,则所有接收位置都将收到通知消息。 若要跨多个接收位置有效地接收通知,可以从 BizTalk 应用程序调用操作,这样一个接收位置接收通知时,另一个接收位置不会收到相同的通知。 因此,可以有效地对在多个位置收到的通知进行负载均衡。

设置业务流程以对接收通知进行负载均衡所需的任务与使用 BizTalk Server 以增量方式接收 Oracle 数据库更改通知的任务相同。 本主题列出了这两种方法之间的唯一区别。

跨多个接收位置 Load-Balancing 查询通知

主题使用 BizTalk Server 以增量方式接收 Oracle 数据库更改通知一样,通过执行PROCESS_RECORDS过程配置增量通知。 若要配置负载均衡,可以执行一个存储过程,以删除已收到通知的记录。 例如,请考虑具有以下定义的存储过程NOTIFY_LOAD_BALANCE:

PROCEDURE NOTIFY_LOAD_BALANCE (TABLE_DATA OUT SYS_REFCURSOR) IS
  var int;
BEGIN
  SELECT TID INTO var FROM ACCOUNTACTIVITY WHERE ROWNUM = 1 FOR UPDATE;
  OPEN TABLE_DATA FOR SELECT * FROM ACCOUNTACTIVITY WHERE TID = var;
  DELETE FROM ACCOUNTACTIVITY WHERE TID = var;
END NOTIFY_LOAD_BALANCE;

作为 BizTalk 应用程序的一部分执行此存储过程时,将删除已收到通知的记录。 因此,另一个接收位置会收到下一条记录的通知。

下面是配置接收通知的负载均衡时必须执行的高级步骤。

  1. 通知 (入站操作) 和 NOTIFY_LOAD_BALANCE 过程创建架构, (出站操作) 。

  2. 添加业务流程并添加三条消息,用于接收通知、执行过程以及获取过程的响应。

  3. 通过添加发送和接收形状、构造消息形状和端口来创建业务流程。 可以使用相同的示例代码来构造消息以调用NOTIFY_LOAD_BALANCE存储过程。 请注意,在 BizTalk Server 管理控制台中执行操作时,必须将NOTIFY_LOAD_BALANCE过程的请求消息位于位置 C:\TestLocation\MessageIn 中。 之所以这样做,是因为作为在增量使用 BizTalk Server 接收 Oracle 数据库更改通知中创建的业务流程的一部分调用的代码片段会基于 C:\TestLocation\MessageIn 中存在的请求 XML 创建请求消息。

  4. 生成和部署应用程序。 若要演示负载均衡,必须至少在安装了 BizTalk Server 和 Oracle 数据库适配器的两台不同计算机上部署此业务流程。

  5. 在两台计算机上的BizTalk Server管理控制台中,为 WCF-Custom 或 WCF-OracleDB 接收位置指定以下绑定属性:

    Binding 属性
    InboundOperationType 将此设置为 “通知”。
    NotificationPort 指定 ODP.NET 必须打开才能侦听 Oracle 数据库中的数据库更改通知的端口号。 将此设置为必须添加到 Windows 防火墙例外列表的相同端口号。 有关如何将端口添加到 Windows 防火墙例外列表的说明,请参阅 https://go.microsoft.com/fwlink/?LinkID=196959重要: 如果将此值设置为默认值 -1,则必须完全禁用 Windows 防火墙才能接收通知消息。
    NotificationStatement 将此设置为:

    SELECT TID,ACCOUNT,PROCESSED FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’注意: 必须指定表名称和架构名称。 例如,SCOTT.ACCOUNTACTIVITY
    NotifyOnListenerStart 将此设置为 True
  6. 启动 BizTalk 应用程序。

  7. 若要开始接收通知,请在 ACCOUNTACTIVITY 表中插入一百条记录。 执行此操作时,请确保用于调用NOTIFY_LOAD_BALANCE过程的请求 XML 在 C:\TestLocation\MessageIn 中可用。

  8. 监视两台计算机上的 () BizTalk 应用程序将删除通知消息的位置。 你会注意到,在插入的数百条记录中,一个位置获取某些记录的通知,而另一个位置获取剩余记录的通知。 这两个位置将同时收到所有百条记录的通知。

另请参阅

使用 BizTalk Server 以增量方式接收 Oracle 数据库更改通知