BizTalk组中的多个BizTalk服务器 - 如何处理并发?

时间:2010-02-01 06:07:18

标签: concurrency biztalk biztalk-2009 biztalk-deployment

我目前负责建立多环境BizTalk部署,我们计划在BizTalk组中部署两个或更多BizTalk Server,以提供高可用性和可伸缩性。

我们现在关注的是如何处理WCF SQL和文件适配器等适配器的并发性,因为例如SQL Adapter可能会在同一个数据库表上继续轮询两个BizTalk Receive主机。

最初我对SQL的想法是使用锁定提示,但我不确定是否有任何其他问题,或者是否有任何其他经过验证的解决方案。

对于文件适配器我所知道的是,可以将接收适配器设置为在处理期间更改文件的文件名,以便其他BizTalk主机将避免拾取文件但我不确定此解决方案是否足够处理并发。

我将不胜感激任何帮助/建议。

非常感谢

3 个答案:

答案 0 :(得分:7)

general 中,大多数BizTalk适配器都会为您提供开箱即用的竞争条件。

例如,BizTalk文件适配器已实现文件锁定,因此不同主机上的多个文件适配器实例将不会读取同一文件。

文件重命名功能的使用说明如下(来自MSDN documentation

  

您也可以配置文件   接收适配器以重命名文件   处理它们。你应该重命名   文件以确保接收   适配器不会生成重复   消息,如果接收位置是   关闭并重新启动

在多个实例上运行时,有几个适配器不安全。这些包括(但可能还有其他)POP3,FTP,MSMQ / MSMQT和数据库适配器在轮询方案中。

对于这些适配器,您可以使用群集主机的BizTalk功能。有一篇帖子here解释了群集主机的使用和配置。这是确保SQL轮询不会产生重复的最简单方法。如果需要,您还可以在SQL级别实现此目的。

除此之外,您真正了解业务流程的细节,您需要为每个案例进行设计。例如 - 如果源系统提供两次相同的文件会发生什么?

有关此主题的更多信息,请参阅以下两篇SO帖子:

BizTalk - Receive Port reading twice from DB

Network Load Balancing Biztalk Instances

答案 1 :(得分:0)

MSDN的这一部分也可以帮助你:

http://msdn.microsoft.com/en-us/library/aa558765(BTS.20).aspx

答案 2 :(得分:0)

感谢您提供的答案和链接。实际上我已经阅读了其中一些,我也能够对这些解决方案进行一些测试。 对于SQL适配器,BizTalk主机群集被证明是一个很好的解决方案,但会导致您无法最大限度地利用BizTalk Group(主机冗余)的优势来实现可伸缩性。因此,出于这个原因,我们已经决定避免使用群集解决方案,但对于真正需要群集以实现高可用性的MessageBox。 我们要完成的是拥有一个主动/主动或者我应该通过BizTalk Server Group说负载平衡,这意味着我们真的会同时进行多个SQL接收适配器轮询。 最初我的解决方案是在查询级别处理它通过锁定提示,下面是我的SP样本。

MERGE INTO EmployeeComp
USING (SELECT EmployeeID
FROM
[AdventureWorks].[dbo].[EmployeeComp] 
WITH (READPAST, UPDLOCK) 
WHERE
[AdventureWorks].[dbo].[EmployeeComp].[Status] = 0) e(EmployeeID)
 ON EmployeeComp.EmployeeID = e.EmployeeID
WHEN MATCHED THEN
 UPDATE SET
 STATUS = 2

OUTPUT Inserted.EmployeeID, Inserted.Name, Inserted.Status;

您能否就我创建的SP提供一些反馈?我做了几次测试,BizTalk WCF-SQL适配器读取了大约500,000个数据,然后同时写入了数千个数据,并证明它正如我所期望的那样工作。

虽然解决方案似乎还不错,但我还不确定对这种解决方案有什么影响,也许你可以解释一下这个问题呢?

此外,我在考虑是否可以使用本文中的SQL Server Service Broker。 http://blogs.msdn.com/adapters/archive/2008/06/30/using-the-wcf-sql-adapter-to-read-messages-from-ssb-queues-and-submit-them-to-biztalk.aspx

现在我还在检查它,还不确定是否有可能解决这个问题。

非常感谢