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

Concurrency BizTalk组中的多个BizTalk服务器-如何处理并发性?,concurrency,biztalk,biztalk-2009,biztalk-deployment,Concurrency,Biztalk,Biztalk 2009,Biztalk Deployment,我目前负责进行多环境BizTalk部署,我们计划在BizTalk组中部署两个或多个BizTalk Server,以提供高可用性和可扩展性 我们现在关心的是如何处理WCF SQL和文件适配器等适配器的并发性,因为对于SQL适配器,两个BizTalk接收主机可能会在同一个DB表上继续轮询 最初我对SQL的想法是使用锁定提示,但我不确定是否还有其他问题,或者是否有其他经验证的解决方案 对于文件适配器,我知道可以将接收适配器设置为在处理过程中更改文件的文件名,以便其他BizTalk主机避免拾取文件,但我

我目前负责进行多环境BizTalk部署,我们计划在BizTalk组中部署两个或多个BizTalk Server,以提供高可用性和可扩展性

我们现在关心的是如何处理WCF SQL和文件适配器等适配器的并发性,因为对于SQL适配器,两个BizTalk接收主机可能会在同一个DB表上继续轮询

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

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

如有任何帮助/建议,我将不胜感激

非常感谢

一般来说,大多数BizTalk适配器都会在开箱即用的情况下为您避免竞争条件

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

下面解释了文件重命名功能的用法(来自)

您还可以配置该文件 接收适配器以在以下情况下重命名文件: 处理它们。你应该重新命名 文件,以确保 适配器不生成重复数据 如果接收位置为,则显示消息 关闭并重新启动

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

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

除此之外,您还需要真正了解业务流程的细节,并且需要针对每个案例进行设计。例如,如果源系统两次提供同一文件,会发生什么情况

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


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


感谢您提供的答案和链接。事实上,我已经阅读了其中的一些,我也能够对这些解决方案进行一些测试。 对于SQL适配器,BizTalk主机群集被证明是一个很好的解决方案,但会导致您无法最大限度地利用BizTalk组(主机冗余)的优势来实现可伸缩性。因此,我们决定避免使用集群解决方案,但对于MessageBox,它确实需要集群来实现高可用性。 我们试图实现的是通过BizTalk Server组实现主动/主动或负载平衡,这意味着我们将同时进行多个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适配器读取的大约500000个数据进行了几次测试,同时又写入了数千个数据,结果证明它的工作符合我的预期

虽然这个解决方案看起来不错,但我还不确定对这种解决方案有什么影响,也许你也能给我一些启示

此外,我还在考虑是否可以使用本文中的SQLServerServiceBroker

现在我还在检查它,还不确定如何解决这个问题


非常感谢

嗨,瓦格纳谢谢你的链接。这些信息非常有用。您仍然可以使用biztalk组和群集主机的本机负载平衡—您仅将群集主机用于适配器,而将另一个非群集主机用于其他所有内容。关于这个过程,我会看一看,但我建议您也将其作为一个新问题发布,因为有更多的SQL专家参与其中,所以可能不会检查BizTalk问题。