适配器减慢 BizTalk
Posted
技术标签:
【中文标题】适配器减慢 BizTalk【英文标题】:Adapter slows down BizTalk 【发布时间】:2012-09-10 09:41:08 【问题描述】:我遇到了慢速(自定义)BizTalk 适配器的问题。
每晚,应用程序在几分钟内向 MSMQ 发送超过 10,000 条消息。 不幸的是,BizTalk 需要几个小时来处理它们。
我没有任何编排,只是将消息路由到多方。 对于一方,我们必须开发一个自定义适配器,但是这个适配器/接口非常慢。 所以我认为 BizTalk 会自动限制整个应用程序,并且只从队列中读取它可以通过这个慢速适配器发送的尽可能多的消息。
因此,MSMQ 清空需要几个小时。
如果我停止这个慢速适配器,例如仅启用写入本地文件系统的文件适配器,处理来自 MSMQ 的数千条消息需要几秒钟。
是否可以调整 BizTalk 以更快地处理传入消息并仅限制此发送端口的传出消息?不幸的是,由于一方慢,所有其他方都必须等待消息。
感谢您的建议!
最好的问候 迈克尔
【问题讨论】:
BizTalk 默认应该以这种方式工作(即独立发送端口),除非例如你有一些排序或排序机制(有序交付,单身管弦等)。当批次到达时,您能否检查主机的消息发布和传递限制状态,例如使用these PerfMon counters? BizTalk 可能是例如由于假脱机表使用率高而受到限制,这会影响流经它的所有消息。 【参考方案1】:您可能会遇到基于速率的限制条件 (see MSDN)。当 Publishing Rate(消息进入率)超过 Delivery Rate * Rate Overdrive Factor(消息发送率 * 限制百分比)时,就会出现这种情况。
避免这种限制状态的一种简单方法是在 BizTalk 主机配置设置中增加速率过载因子。这可能不是最佳做法,因为听起来您需要将 Rate Overdrive Factor 设置为非常高的值,这可能会产生其他影响。
根据您构建解决方案的方式,您的另一种选择是将您的发送端口/适配器拆分到其自己的主机实例上。由于节流是在每个主机实例的基础上执行的,因此拆分此特定适配器的处理意味着它将不再影响通过标准适配器功能传递给其他方的消息的性能。
【讨论】:
谢谢 Brett,我已将发送端口/适配器移至专用主机实例【参考方案2】:我可以想到一种可以帮助解决您的问题的架构方法,尤其是考虑到您的评论:
是否可以调整 BizTalk 以更快地处理传入消息并仅限制此发送端口的传出消息? 不幸的是,由于一方慢,所有其他方都必须等待消息。
对于每一方,创建一个新的 MSMQ“方队列”并从传入(大消息量)队列直接写入该队列 - 单个接收端口/位置具有多个订阅传入消息并写入的“方”发送端口到他们各自的“派对队列”。
您现在可以读取每个单独的“派对队列”并使用关联的发送端口(如果需要,使用慢速适配器)发送消息 - 这应该比使用单个发送端口快得多;您实际上是在将接收端与发送端分离。
我还会考虑审查您的主机/主机实例策略,以确保您从节流的角度进行适当的分离。
【讨论】:
以上是关于适配器减慢 BizTalk的主要内容,如果未能解决你的问题,请参考以下文章
Biztalk 适配器包安装 - 没有看到 WCF-SQL 适配器
BizTalk 2010 WCF-SQL 适配器 XML 轮询问题