假设您在同一数据库中有多个作为不同 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 应用程序的一部分执行时,将删除已接收通知的记录。 因此,另一个接收位置会获取下一条记录的通知。
下面是为接收通知配置负载均衡而必须执行的高级步骤。
为 通知(入站操作)和 NOTIFY_LOAD_BALANCE 过程(出站操作)创建模式。
添加一个编排,并添加三条消息,分别用于接收通知、执行过程和获取过程的响应。
通过添加发送和接收形状、构造消息形状和端口来创建业务流程。 可以使用相同的示例代码来构造消息来调用NOTIFY_LOAD_BALANCE存储过程。 请注意,在 BizTalk Server 管理控制台中执行操作时,必须在位置 C: \TestLocation\MessageIn 中具有 NOTIFY_LOAD_BALANCE 过程的请求消息。 这样做是因为,作为“使用 BizTalk Server 增量接收 Oracle 数据库更改通知”的业务流程的一部分调用的代码片段会根据存在于 C:\TestLocation\MessageIn 的请求 XML 创建请求消息。
生成和部署应用程序。 若要演示负载均衡,必须在安装了 BizTalk Server 和 Oracle 数据库适配器的两台不同计算机上至少部署此业务流程。
在两台计算机上的 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。 启动 BizTalk 应用程序。
若要开始接收通知,请将一百条记录插入 ACCOUNTACTIVITY 表中。 执行此作时,请确保调用NOTIFY_LOAD_BALANCE过程的请求 XML 在 C:\TestLocation\MessageIn 中可用。
监视 BizTalk 应用程序将在两台计算机上投递通知消息的位置。 你会注意到插入的百条记录中,一个位置会获取一些记录的通知,而另一个位置则获取剩余记录的通知。 这两个位置将同时收到所有百条记录的通知。