背景:的BizTalk殭屍 - 任何方式從BizTalk業務流程內顯式刪除訂閱
我們利用了大量的聚集,單和多例的業務流程中,類似於這裏描述Seroter's Round Robin技術(的BizTalk 2009) 。
所有這些編排類型都具有相當任意的出口或延續點(對於聚合),通常由定時器定義 - 即如果Orch在X分鐘內沒有收到任何更多消息,則繼續進行批處理,如果在經過了更多的分鐘後,沒有更多的消息,然後退出。 (由於對degraded performance after large numbers of messages的關注,我們也退出了我們的單/ N噸)。
儘管我們試圖減輕對殭屍的攻擊,通過開始異步重構編排中的任何延續處理,總是有一個弱點,一個「好」的時間消息可能導致殭屍。 (即接收更多與「已完成」編排形狀相關的傳入消息),
如果消息導致其中一個訂閱上出現殭屍,則該消息似乎不會傳播給其他訂閱者(即orchs完全與'造成殭屍'編排)分離,即殭屍原因消息沒有處理。
問題
所以我會在看到如果有人有另外一種方法,編程或以其他方式,從運行的業務流程明確刪除相關認購非常感興趣,一旦業務流程已經「進步」超越的地步它對這個相關的消息感興趣。 (這個新的消息將隨後通常會開始有自己的相關性等新的業務流程)
在這一點上,我們會考慮甚至是黑客的解決方案,如反映的BizTalk API調用或直接在SQL中刪除對MsgBoxDB。
從那以後,問題出在2006年,你是否需要關閉編排?我在bt2009成功地使用了大量消息的模式。協調不斷。爲了安全地關閉它們,我停止了信源,然後是編排。 –
不幸的是,我們大多數傳入流量來自單個MQ隊列,因此停止接收端口會影響我們所有的應用程序。但你是對的 - 這是一個關於泄露的「擔憂」,而不是真實的證據(例如看到附加到單身人士身上的50k +信息令人望而生畏)。在異常的負載下,暫停一些單例orch可以正常工作,然後一旦服務器恢復/完成了更緊急的工作(因爲'設計'只有非延遲關鍵的消息將被分配給Singletons/Round-Robins)。 – StuartLC
是否可以在現有隊列和當前接收器之間添加另一個隊列?這樣,您可以停止新的接收器並正常關閉業務流程。 –