共用方式為


BizTalk Server中訊息的已排序傳遞

訊息的排序傳遞可確保以指定順序發佈至 MessageBox 資料庫的訊息是以與發佈至 MessageBox 的相同順序傳遞給每一個相符的訂閱者。

設定訊息的排序傳遞

可在下列位置設定訊息的排序傳遞:

  • 協調流程中接收圖形
  • 傳送埠

具備現有傳輸的排序傳遞

在特定傳輸之下的通訊協定,像是 FILE 和 HTTP,與排序傳遞的概念並不一致。 不過,即使具備這類傳輸,若與傳輸繫結的連接埠標示為排序的傳遞,則 BizTalk Server 會藉由保證除非已成功傳送目前的輸出訊息,否則傳輸不會取得下一個輸出訊息,以強制排序的傳遞。 BizTalk Server 執行這項工作的方法是將每個訊息以單一批次傳遞給傳輸的配接器,並等待配接器成功從 MessageBox 刪除訊息後,再以另一個批次傳遞下一個訊息給配接器。

自訂配接器的排序傳遞

自訂接收配接器有一些特殊的考量。 若您正在撰寫可支援接收時排序傳遞的自訂配接器,則配接器應執行下列動作:

  • 提交一批訊息之後,您的自訂接收配接器應該等候來自BizTalk Server的BatchComplete回呼,然後再提交下一個批次。 如需詳細資訊,請參閱 Batch-Supported 接收配接器的介面

  • 若訊息在管線中失敗,應該被擱置,最好標示為不可繼續。 使用BTS。BizTalk Server 中的 SuspendAsNonResumable訊息內容屬性,以適當地標記訊息。

注意

若在稍後繼續擱置的訊息,則會中斷訊息順序。 若您不希望中斷順序,請擱置失敗的訊息並設為不可繼續。

如需建置自訂配接器的詳細資訊,請參閱 開發自訂配接器

端對端排序訊息處理的條件

若要提供端對端排序的傳遞,必須符合下列條件:

  • 必須以保留提交訊息給 BizTalk Server 的訊息順序之配接器接收訊息。 在BizTalk Server中,這類配接器的範例包括 MSMQ 和 MQSeries。 此外,HTTP 或 SOAP 配接器可以用來依序提交訊息,但在此情況下,HTTP 或 SOAP 用戶端必須一次提交一則訊息來強制執行順序。

  • 您必須訂閱這些訊息,且傳送埠的 [ 已排序傳遞 ] 選項設定為 True

  • 如果使用協調流程來處理訊息,則應該只使用協調流程的單一實例、協調流程應該設定為使用循序傳送,而且協調流程接收埠的 已排序傳遞 屬性應設定為 True

限制

下列各項不支援訊息的排序傳遞:

  • BizTalk Server 2013 R2 和舊版中的動態傳送埠

  • BizTalk Server 2016 (中的動態傳送埠,以及不支援靜態傳送埠上已排序傳遞之介面卡類型的任何較新版本)

  • 備份傳輸

互動

當傳送埠設定為排序的傳遞時,請注意與 BizTalk Server 中其他設定的行為之下列互動:

  • 相同傳送埠上的 [目前訊息失敗之後停止傳送後續訊息] 設定:

    • False。 只會擱置失敗的訊息 (不可繼續) 並繼續處理所有後續訊息。 這會保留未失敗訊息的順序,但會造成順序的間斷。 例如,若收到順序 101、102 和 103,並擱置順序 102,則繼續依序處理順序 101 和 103。

    • 正確。 若任何訊息處理失敗,則擱置傳送埠執行個體。 這會造成訊息排序集合中的所有後續訊息被擱置。 這是藉由在失敗的訊息傳遞之前,防止後續訊息的傳遞,以保留訊息順序。

  • 如果請求回應傳送埠已將 [停止在目前訊息失敗時傳送後續訊息] 屬性設定為 true ,而且如果已針對回應之接收管線的反組解碼階段設定可復原交換處理,則傳送埠不會停止傳送訊息 (也就是說,如果回應發生可復原的錯誤,則實例不會暫停) 。

  • 刪除排序的傳送埠之前,請確定沒有與其相關聯的執行個體。 若有相關聯的執行個體,應該在刪除傳送埠之前先終止它們。

檔案傳輸的排序傳遞

訊息依序到達 FILE 配接器。 FILE 配接器可能附加訊息到單一檔案或寫出檔案順序,結果如下:

  • 若訊息資料附加到單一檔案,則依序附加個別訊息。 在傳送埠上使用 FILE 配接器進行依序傳遞的選項,只有在傳送埠可在附加模式下作用時才有意義。

  • 若訊息寫入個別檔案,則依序命名的檔案名稱可反映順序。 在此情況下,若是由配接器寫入的檔案,則與時間相關的檔案系統屬性 (例如,檔案建立時間或修改時間) 不一定要反映訊息到達的順序。

排序傳遞的效能影響

注意

BizTalk Server 2020開始,針對具有已排序傳遞的動態傳送埠,其中訂單不需要跨不同輸出位置維護,可以使用多個傳送埠實例來平行處理傳送至不同輸出位置的訊息,以達到更高的輸送量。

為執行排序的傳遞,BizTalk Server 必須在訊息路徑上的不同點序列化處理排序的訊息。 這是藉由向外延展的技術達成,像是使用多個主控件執行個體以供平行處理訊息。 使用排序的傳遞時,即使連接埠設定為在多個主控件執行個體上執行,仍然只在單一主控件執行個體上執行,以確保排序的傳遞。 不過,在此情況下,還是可以維持高可用性,因為處理訊息的排序傳遞之主控件執行個體的失敗,會使得失敗的訊息在另一個可用的主控件執行個體上重新處理。

啟用 [已排序傳遞] 時,預設的 重試間隔 為 5 分鐘。 若要改善效能,請將 [重試間隔] 設定為最小值,也就是 1 分鐘。 Retry Interval屬性可以接受零 (0) ,但零 (0) 無效。 重試 計數 也可以調整為所需的重試次數。 例如,如果您知道要求應該在 < 1 分鐘內處理,而且永遠可以存取傳送埠目的地,請將這兩個值設定為 1。

若要變更重試值,請移至 如何設定傳送埠的傳輸進階選項

如需已排序傳遞的其他資訊,請參閱下列內容:

BizTalk:端對端排序的訊息處理選項

BizTalk:已排序的傳遞

另請參閱

使用 MSMQ 配接器依序傳遞訊息
使用 MQSeries 配接器依序傳遞訊息