建立 Service Broker 應用程式
本章節提供 Service Broker 應用程式的一般結構概觀、討論啟動使用 Service Broker 的應用程式最常見的一些策略,以及描述接收和處理訊息的基本步驟。
適用於起始服務的應用程式,使用 BEGIN DIALOG 陳述式以指定在每個端點的服務資訊,以及應用程式將用以通訊的服務合約。應用程式使用 SEND 陳述式中,將交談的第一個訊息傳送到目標服務。應用程式必須從 Service Broker 準備接收和處理訊息,即使合約不允許目標服務傳回訊息。起始應用程式通常會實作成兩個不同的元件。一個元件會開始交談,而另一個元件則會處理到達佇列的訊息。
適用於目標服務的應用程式會從起始服務接收和處理訊息。應用程式也必須從 Service Broker 準備接收和處理訊息。
視服務的需求而定,處理佇列的應用程式部分可以用數個不同的方法來啟動。如需有關啟動使用 Service Broker 的詳細資訊,請參閱<選擇啟動策略>。
不過,應用程式啟動時,應用程式會開始交易,並使用 RECEIVE 陳述式來將訊息移出佇列。應用程式會從訊息擷取資料,並進行任何所需的處理。若有需要,應用程式會使用 SEND 陳述式,將訊息傳送到交談的另一端。應用程式接著會認可交易。為了提高效率,應用程式可以在相同的交易中處理多個訊息。維護狀態的服務通常會使用 GET CONVERSATION GROUP 陳述式來鎖定交談群組、擷取交談群組的狀態,然後為交談群組處理多個訊息。
使用 SEND 與 RECEIVE 陳述式來傳輸端點之間的訊息時,交談會繼續。若有需要,交談中的任一個參與者,隨時都可以使用 BEGIN DIALOG 來啟動與另一個服務的交談,以取得其他資訊。例如,處理事件通知的應用程式可能會使用提供個人資訊的服務來起始其他交談,才能在傳送出警示之前,先擷取目前的合約資訊。
當交談已達成其目的時,在適當端點的應用程式將使用 END CONVERSATION 陳述式來結束交談。其他參與者會接收 END CONVERSATION 訊息,並且也在其端點上發出 END CONVERSATION 訊息。一旦參與者已發出 END CONVERSATION 訊息,交談會結束。
如果錯誤發生,在交談中的某個參與者可能會使用 WITH ERROR 子句來結束交談,以指出失敗。使用 WITH ERROR 子句結束交談,並傳送 Service Broker 錯誤訊息給交談中的另一個參與者。
如果 Service Broker 偵測到錯誤或是交談存留期間過期,Service Broker 會結束交談,並將錯誤訊息傳回使用中參與者。如果 Service Broker 無法建立交談,則唯一使用中參與者是起始應用程式,而且該錯誤會傳遞到起始服務。如果某個參與者已經結束交談,則會將錯誤訊息傳遞到其他參與者。否則,會將錯誤傳遞到交談中的兩個參與者。