使用 BizTalk Server 从 SQL 接收多个接收位置上的查询通知

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

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

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

主题使用 BizTalk Server 从 SQL 以增量方式接收查询通知一样,你通过对已通知的记录执行 UPDATE 语句来配置增量通知。 若要配置负载均衡,可以执行一个存储过程,以删除已收到通知的记录。 例如,假设存储过程PROCESS_EMPLOYEE具有以下定义:

DECLARE @var int  
SELECT TOP 1 @var = Employee_ID FROM Employee  
SELECT * FROM Employee WHERE Employee_ID=@var  
DELETE FROM Employee WHERE Employee_ID=@var  

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

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

  1. 通知 (入站操作) 创建架构, PROCESS_EMPLOYEE 存储过程 (出站操作) 。

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

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

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

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

    Binding 属性
    InboundOperationType 将此设置为 “通知”。
    NotificationStatement 将此设置为:

    SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0

    注意: 对于通知语句,必须始终指定表名称和架构名称。 例如,dbo.Employee
    NotifyOnListenerStart 将此设置为 True
  6. 启动 BizTalk 应用程序。

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

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

另请参阅

使用 BizTalk Server 接收 SQL 查询通知