簡體   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