我开发了一个BizTalk应用程序,该应用程序接收到输入的文件,其中包含一堆消息。我使用BizTalk XML拆卸器组件来“删除” Sepereate消息中的文件。这些消息中的每一个都是通过编排转换消息并调用WCF服务的编排。

我现在正在遇到的问题是,每个批次包含1000条消息,并且这些1000条消息似乎都一次拨打WCF服务。 WCF服务被这些消息“轰炸”,并配置为并行处理10条消息(每个调用都必须处理数据并将数据放入数据库中),并将一堆“太忙”的例外返回到BizTalk。我配置了WCF适配器以在1分钟后再次重试连接。

最终结果是BizTalk首先删除消息,然后用所有1000条消息轰炸WCF服务,得到一堆“太忙”的例外,然后等待一无所有,直到1分钟传递,然后再次炸弹,然后再炸弹,所以在。

如果我能够配置BizTalk以打开最大10连接到该特定的WCF服务,但是据我所知,这是不可能的,那么该处理将更加有效。 (WCF服务被配置为使用net.tcp。)

我确实以几种不同的方式尝试了主机的节流设置,但是它没有帮助,或者它使应用程序无法忍受慢。同样,BizTalk的节流似乎以首次轰炸服务的方式实施,然后注意到它正在轰炸,然后等待一会儿什么都不做,然后抬起油门,然后再次轰炸。滴入请求/消息似乎更好,以便它们及时均匀地散布。我想配置WCF适配器以每秒接收最大4条消息。现在,可能的节流功能如下:在5秒钟的滑动窗口上,如果有20个以上的消息,我希望将限制激活。但这不是相同的,因为它允许“爆发”效果。

有什么想法我如何改善吞吐量?

有帮助吗?

解决方案 3

这个问题已经超过一年了,但是我只想添加一个答案,以防有人有同样的问题。

我尝试使用BizTalk主机的节流配置。这无济于事。我实际上并没有尝试使用Singleton模式,因为那是我不想要的东西:我们创建了一个功能强大的面向服务的体系结构,可以轻松地并行处理多个消息,而且我不想通过引入Singleton模式来完全撤消该消息。

那我最终做了什么?首先,我再次考虑了实际需要的内容:我们需要处理一堆包含1000条消息的文件。处理文件中的消息的顺序并不重要。处理文件的顺序很重要。通常,我们应该处理第一个文件1,然后是2,然后是3,依此类推。但是,并不是那么严格,该顺序仅在文件范围内,例如,必须处理第一范围1-5,然后范围6-8,但是在一定范围内,文件的顺序并不重要。所以这些就是要求。

我更改的第一件事是我更改服务以接受消息集合,以便一次处理1个文件,而不是一次处理1个消息。通过一次处理1个文件,只有1个调用WCF服务,它的优势是,BizTalk和WCF服务之间的聊天碎片要少得多。但是请注意,这使WCF服务端上的代码更加复杂,因为仍然必须独立于其他消息处理(使错误处理更加复杂)。如果我们设法一次处理有限数量的文件,我们还可以避免过于忙碌的错误。

在消息的实际处理旁边,WCF服务还提供了“注册”文件处理的调用。这是服务器端上的代码,该代码在当时是否可以处理文件:它考虑了文件的顺序,并确保只有在先前的文件(范围)已经注册文件(范围)才能注册处理。这些寄存器调用尝试在内部等待的循环中注册文件(范围)。该呼叫试图注册文件,如果不接受,它将等待然后再次尝试。我真的不喜欢这个解决方案,但它可以起作用。

因此,最后,我有一个解决方案,可以考虑到文件范围的顺序,其次是可以并行处理多少个文件的配置。这意味着我不再遇到任何忙碌的错误。对我的解决方案不完全满意,但它确实有效并且非常稳定。在过去的一年中,它一直没有问题。

其他提示

使用 Biztalk Singleton图案. 。这很丑。但是,BizTalk优雅的建筑与现实世界相遇时会产生丑陋。

对于SOAP,HTTP和基于HTTP的WCF适配器,您可以使用ConnectionManagement设置并限制那里的连接数。您可以准确指定每个BizTalk主机实例的并发连接数量。设置肥皂,HTTP和基于HTTP的WCF适配器并发连接

笔记:

  1. 这限制了每个连接的数量 主机实例. 。因此,如果您要么在不同主机上有多个发送端口,要么每个主机都有多个主机实例,那么所做的连接总数仍然可以超过此数字。

  2. 这只是为了 SOAP,HTTP和基于HTTP的WCF适配器. 。不适合其他WCF适配器,如rvdginste所述

BizTalk中的宿主节流状态是BizTalk本身可用性的自保存机制 - 我不会轻易改变这些机制。

与Igal的Singleton Idea一样,您可以对BizTalk进行肮脏的事情,以防止其使用WS呼叫使您的应用程序超载,但是恕我直言,您最终可能会通过这样做来伤害BizTalk服务器的可扩展性。似乎对您的应用程序的同步调用可能是问题 - 可能会考虑使用MSMQ进行异步进行更改?

但是,如果您保持同步WCF,也可以查看 这些旋钮 对于发送主机上的WCF适配器(我认为您需要转到WCF-CUSTOM适配器(如果还没有))

我已经使用了 实例控制器 多次模式,似乎运行良好。这个想法是,您将真实的信息包裹在编排的有效载荷中。当需要打电话给您的服务时,您将其传递给编排,如果编排过多,则脱水。它是一个简单的概念,效果很好。

我会说博客非常*过时..但是这个想法有效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top