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