繁体   English   中英

Biztalk-如何限制流式拆卸管道

[英]Biztalk - How to throttle a streaming disassemble pipeline

我需要限制在流式反汇编接收管道中分批处理大型消息时生成的业务流程实例的数量。 假设我要传入一个大型xml,其中包含100 000个单独的“ Order”消息。 然后,接收管道将对其进行批处理,并创建100 000个“ ProcessOrder”业务流程。 这太多了,我需要限制这一点。

要求

  1. 分离需要以流方式完成,这样我一次只能在内存中加载一条“ Order”消息,然后再将其发送到消息框。
  2. 需要根据当前正在运行的“ ProcessOrder”业务流程实例的数量来限制分批处理(例如,如果我已经有100个正在运行的实例,则分批处理将等到一个结束后再向消息框发送另一条“ Order”消息)。

我在哪里

  1. 我有接收管道,可以对我的消息进行分批处理和功能修改。 它以流方式完成应做的工作,并将各个消息放入VirtualStreams中。

  2. 我有一个业务流程和帮助程序方法,它们可以限制“ ProcessOrder”业务流程实例的数量。

问题

我知道我可以在业务流程中运行一个接收管道(这将解决我的问题,因为在对管道的每个“ getnext”调用中,如果正在运行的业务流程实例太多,我都可以继续进行), 但是 ,挖掘biztalk dll ,我注意到使用Microsoft.XLANGs.Pipeline.XLANGPipelineManager仍会加载内存中的所有消息,而不是像Microsoft.BizTalk.PipelineOM.PipelineManager那样枚举它们。 我知道他们将每条消息都放入VirtualStream中,但是对于如此大的消息数,这在内存方面还是不够的。

我的下一步是直接在接收端口中运行接收管道(因此它将使用Microsoft.BizTalk.PipelineOM.PipelineManager),而无需进行编排来限制“ ProcessOrder”实例的数量,但是为了满足要求,我将需要在我的管道中添加延迟逻辑。 这是可行的选择吗? 如果没有,为什么? 还有什么其他选择?

您应该从管道中一次对所有消息进行分批处理,并将这些单个消息存储在MSMQ中,甚至在业务流程对其进行处理之前也是如此。 使用标准管道对消息进行分批处理,因为它们可以有效地处理大型文件的分批处理。 可通过“打开Windows功能”免费获得MSMQ。 使用MSMQ非常容易,不需要任何开发。 发送到MSMQ将非常快,根本不会发出10万条消息。

然后有一个接收位置,可以从MSMQ读取。 根据业务流程的吞吐量,您可以通过使用BizTalk接收主机限制或通过按顺序从MSMQ接收消息或同时使用两者来控制消息流。 确保您具有用于接收MSMQ和发送MSMQ以及用于业务流程处理的单独的主机实例。

这将通过所有配置完成,而无需任何额外的代码即可简化您的设计。 确保编排的持久点数最少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM