我需要限制在流式反汇编接收管道中对大消息进行分批时产生的编排实例的数量。假设我有一个包含 100 000 个单独的“订单”消息的大型 xml。然后接收管道将对其进行分批并创建 100 000 个“ProcessOrder”编排。这太多了,我需要限制它。
要求
- 需要以流式方式进行分批,以便在将其发送到消息框之前一次只在内存中加载一条“订单”消息;
- 需要根据当前正在运行的“ProcessOrder”编排实例的数量来限制分批(例如,如果我已经有 100 个正在运行的实例,则分批将等到一个结束后再向消息框发送另一个“Order”消息)。
我在哪里
我有接收管道,可以对我的消息进行分批和功能修改。它以流的方式完成它应该做的事情,并将单个消息放入 VirtualStreams;
我有一个编排和辅助方法,可以限制“ProcessOrder”编排实例的数量。
问题
我知道我可以在编排中运行接收管道(这将解决我的问题,因为在对管道的每次“getnext”调用时,如果有太多正在运行的编排实例,我可以坚持下去)但是,挖掘 biztalk dll ,我注意到使用 Microsoft.XLANGs.Pipeline.XLANGPipelineManager 仍然会加载内存中的所有消息,而不是像 Microsoft.BizTalk.PipelineOM.PipelineManager 那样枚举它们。我知道他们将每条消息都放在 VirtualStream 中,但是对于如此大的消息数量,这仍然是不够的,内存方面。
问题
我的下一步是直接在接收端口中运行接收管道(因此它将使用 Microsoft.BizTalk.PipelineOM.PipelineManager),而不需要限制“ProcessOrder”实例数量的编排,但为了满足要求,我会需要在我的管道中添加延迟逻辑。这是一个可行的选择吗?如果不是,为什么?我还有什么其他选择?