批次支援接收配接器介面
接收介面永遠會批次提交訊息。 批次指的是內含許多資料庫作業的一個單位,您可以用來執行許多動作,而不只是提交。 例如,接收配接器可以在相同的批次作業中提交一組訊息、暫停一組不同的訊息,並刪除另一組訊息。 我們非常鼓勵您使用批次作業,因為將這些分開的作業群組至相同的批次中可以降低所需的資料庫往返並最佳化效能。
內含式與外掛式接收配接器需要實作下列介面,將一批批的訊息提交至伺服器中:
IBTTransport
僅) IBTTransportControl (進程內配接器
IBTTransportConfig
IBaseComponent
IPersistPropertyBag
IBTBatchCallBack
下列步驟說明接收配接器為了將訊息提交至伺服器中,所執行的動作順序。
接收配接器會呼叫IBTTransportProxy介面的GetBatch方法,從傳輸 Proxy 取得批次。 在其對 GetBatch 的呼叫中,配接器會將指標傳遞給其 IBTBatchCallback 介面實作。
配接器會呼叫IBTTransportBatch介面的SubmitMessage方法,一次將一個訊息加入批次中。 如果這是要求-回應傳訊之類的雙向作業,則會呼叫這個相同介面的 SubmitResponseMessage 方法來提交回應訊息。
當所有訊息都新增至批次時,配接器會呼叫IBTTransportBatch介面的Done方法,將批次提交至傳輸 Proxy。 因為接收配接器本質上是非同步,所以配接器可以立即取得新的批次,並在呼叫 Done之後開始提交其他訊息。
處理批次之後,傳訊引擎會使用傳輸 Proxy 來叫用配接器的 BatchComplete 回呼方法,以進行實際呼叫。 包含提交狀態的 BTBatchOperationStatus 物件陣列會傳遞至配接器。 每個物件都對應到一個作業類型,且包含作業的整體狀態以及每個要求執行作業的訊息狀態。 下列順序說明為了分析處理中的批次狀態,配接器需要執行的動作:
檢查傳遞為 參數給 BatchComplete 方法的整體批次狀態 HRESULT 值。 如果呈現失敗狀態,代表批次中至少有一個作業沒有成功。 因此,以一個實體單位來提交整個批次的作業失敗。 這時候配接器應該要試著探索作業失敗的訊息,並將那些一開始就成功的訊息整合為一個批次重新提交。
如果整體批次狀態成功,代表所有傳遞至傳輸 Proxy 的訊息都已保存至磁碟中。 然而,這不代表管線已成功處理所有的訊息, 而是代表管線中失敗的訊息可能已被擱置。 針對在管線中失敗的訊息,傳回的整體批次狀態還是成功的,因為資料已經寫入磁碟。
檢查 參數中
operationStatus
每個作業類型的狀態。 如果狀態 S_OK,則此作業的提交成功,您不需要進一步檢查狀態。 如果狀態設定為 BTS_S_EPM_MESSAGE_SUSPENDED 部分訊息已暫止。 BTS_S_EPM_SECURITY_CHECK_FAILED 表示某些訊息在需要驗證的接收埠中驗證失敗。 如果 傳回E_FAIL ,或任何值為小於零的 HRESULT,則此作業的訊息提交失敗。針對作業類型檢查每個訊息的狀態。 針對送出作業類型,如果提交成功,則每個訊息的狀態會設定為 S_OK 。 如果訊息已暫停,則會傳回BTS_S_EPM_MESSAGE_SUSPENDED。 如果訊息在需要驗證的接收埠上驗證失敗,就會傳回BTS_S_EPM_SECURITY_CHECK_FAILED。 如果 已發佈的訊息沒有訂閱者,E_BTS_NO_SUBSCRIPTION會傳回。 如果 傳回E_FAIL ,或是具有小於零之值的任何 HRESULT,則訊息提交失敗。
視您的配接器而定,您可能想要暫停傳回 E_FAIL 或任何失敗 HRESULT 的訊息。
BatchComplete方法必須傳回S_OK或E_FAIL,以指出執行結果。 如果 BatchComplete 方法傳回 E_FAIL 或任何負的 HRESULT,傳輸 Proxy 就會記錄錯誤。
下圖顯示在建立支援批次處理的接收配接器時所牽涉的物件互動。
接收配接器提交訊息批次的工作流程
另請參閱
配接器變數
開發接收配接器
具現化並初始化接收配接器
內含式接收配接器介面
外掛式接收配接器介面
交易式批次支援接收配接器介面
同步要求-回應接收配接器介面