【发布时间】:2010-08-28 15:23:08
【问题描述】:
我开发了一个 BizTalk 应用程序,它接收一个包含一堆消息的文件作为输入。我使用 BizTalk XML 反汇编程序组件在单独的消息中“分批”文件。这些消息中的每一个都由一个编排从 MessageBox 中提取,该编排转换消息并调用 wcf 服务。
我现在遇到的问题是每批包含 1000 条消息,而这 1000 条消息似乎都同时调用了 wcf 服务。 wcf 服务被这些消息“轰炸”,并且被配置为仅并行处理 10 条消息(每个调用都必须处理数据并将数据放入数据库)并将一堆“太忙”异常返回给 BizTalk。我将 wcf 适配器配置为在 1 分钟后重试连接。
最终的结果是 BizTalk 首先对消息进行分批,然后用所有 1000 条消息轰炸 wcf 服务,得到一堆“太忙”的异常,然后无所事事地等待,直到 1 分钟过去,然后再次轰炸它,等等。
如果我可以将 BizTalk 配置为打开最多 10 个到该特定 wcf 服务的连接,则处理效率会更高,但据我所知,这是不可能的。 (wcf 服务配置为使用 net.tcp。)
我已经用几种不同的方式尝试了主机的节流设置,但要么没有帮助,要么让应用程序变得难以忍受。此外,BizTalk 中的节流似乎是以一种方式实现的,它首先轰炸服务,然后注意到它正在轰炸,然后等待一段时间什么都不做,然后解除油门并再次开始轰炸。将请求/消息涓涓细流似乎要好得多,以便它们在时间上更均匀地分布。例如,我想将 WCF 适配器配置为每秒最多接收 4 条消息。现在可能的限制是这样的:在 5 秒的滑动窗口中,如果有超过 20 条消息,我希望激活限制。但这不一样,因为它允许“爆发”效果。
有什么想法可以提高吞吐量吗?
【问题讨论】:
-
这根本不是一个好的解决方案,但如果您遇到生产故障问题,您可以使用以下方法。在发送端口高级选项中设置“Ordered Delivery”。您一次只能通过端口收到一条消息。它非常慢,但它可以让你在重写时移动。
标签: wcf biztalk throttling biztalk-2009