Service Broker 的作用為何?
Service Broker 可以協助開發人員建立非同步、鬆散偶合的應用程式,使獨立的元件可以在其中一起運作來完成工作。這些應用程式元件會交換包含完成工作所需資訊的訊息。此主題描述 Service Broker 的下列基本層面:
- 交談
- 訊息排序和協調
- 交易式非同步程式設計
- 對鬆散偶合之應用程式的支援
- Service Broker 元件
交談
Service Broker 是針對傳送和接收訊息的基本功能而設計。每個訊息都組成「交談」(可靠而永續性的通訊通道) 的一部份。每個訊息和交談都具有 Service Broker 強制使用的特定類型,以協助開發人員撰寫可靠的應用程式。
新的 Transact-SQL 陳述式可以讓應用程式可靠地傳送和接收訊息。一個應用程式將訊息傳送至「服務」(一組相關工作的名稱)。另一個應用程式則從「佇列」(內部資料表的檢視) 接收訊息。
同一工作的訊息是同一交談的一部份。在每個交談中,Service Broker 都會保證應用程式只接收每個訊息一次,並依照傳送訊息的順序。實作服務的程式可以將同一個服務的相關交談關聯到「交談群組」(Conversation Group),如<Service Broker 的優點>中所述。
憑證式安全性可以協助您保護機密訊息並控制對服務的存取。
瞭解 Service Broker 的一種方式是將其視為郵遞服務。若要與遠方同事進行交談,您可以使用透過郵遞服務 (排序並傳遞郵件) 傳送的郵件進行通訊。您和您的同事可以從信箱擷取郵件、讀取郵件、撰寫回應,然後傳送新的郵件,直到交談結束為止。當您和您的同事處理其他工作時,郵件傳遞會「非同步」進行。
在郵遞服務模擬中,郵件就是訊息。Service Broker 服務是郵局將郵件遞往的地址。佇列則是郵件傳遞後保留郵件的信箱。應用程式會接收訊息、處理訊息並傳送回應。
使用 Service Broker 的程式與其他程式進行交談的方式與郵遞類似。
您不需要明確知道您的同事何時讀取郵件或撰寫回覆。同樣的,使用 Service Broker 的應用程式也不需要知道其他服務如何處理訊息、如何傳遞訊息,或其他應用程式何時處理訊息。
訊息排序和協調
Service Broker 處理佇列 (一種常見的資料庫程式設計技術) 的方式與傳統產品不同,主要在兩個方面:
- Service Broker 佇列已整合到資料庫中。
- 佇列會協調並排序相關訊息。
整合的佇列意味著,一般的資料庫維護和管理也會將 Service Broker 納入工作範圍。通常,管理員並沒有與 Service Broker 相關的例行維護工作。
Service Broker 架構會提供簡單的 Transact-SQL 介面來傳送和接收訊息,而且還為訊息的傳遞和處理提供了完整的有力保證。Service Broker 保證程式只接收交談中的每個訊息一次,並依照傳送訊息的順序,而不是訊息進入佇列的順序。傳統的佇列產品會以訊息進入佇列的順序提供訊息,應用程式必須自行判斷訊息的順序和群組。Service Broker 則保證兩個佇列讀取器無法同步處理同一交談的訊息或相關交談之同一群組的訊息。
起始程式會啟動每個工作的交談,然後將訊息傳送至目標服務。該訊息包含執行工作中特定步驟所需的資料。目標服務則會接收該訊息。目標服務的程式會對訊息進行處理,然後回應起始服務。交談繼續進行,並最終依據開發人員決定的規則結束。
Service Broker 會處理撰寫訊息應用程式所涉及的多數困難工作。這些工作包括訊息協調、可靠的訊息傳遞、鎖定和啟動佇列讀取器等。這讓資料庫開發人員得以將精力專注於解決業務問題。
交易式非同步程式設計
在 Service Broker 基礎結構中,應用程式間的訊息傳遞是「交易式」(Transactional) 和「非同步」(Asynchronous) 的。因為 Service Broker 訊息傳送為交易式,所以如果交易回復,交易內的所有 Service Broker 作業都將回復,這包括傳送和接收作業。在非同步傳遞中,當應用程式繼續執行時,Database Engine 會處理傳遞。為了提升延展性,Service Broker 提供了一個機制,可以在需要處理佇列的程式來完成某些有用的工作時,自動將其啟動。如需詳細資訊,請參閱<Service Broker Activation>。
非同步程式設計可以協助開發人員撰寫使用佇列的應用程式。許多資料庫應用程式都包含資料表,這些資料表會在資源充裕時當做待完成之工作的佇列。佇列可讓資料庫在有效率使用可用資源的同時,還能保有迅速回應互動使用者的能力。Service Broker 將佇列當做 Database Engine 中的重要組件來提供。
佇列可以讓應用程式在要求某項工作之交易以外的交易中執行該項工作。Service Broker 延伸此一概念,使應用程式得以在其他執行個體或其他電腦上執行工作。Service Broker 在資料庫中提供內建佇列,並在執行個體之間提供可靠的交易式訊息傳遞,來協助資料庫開發人員。
對鬆散偶合之應用程式的支援
Service Broker 支援鬆散偶合的應用程式。鬆散偶合的應用程式由多個獨立傳送和接收訊息的程式組成。此類應用程式對於交換的訊息必須都包含相同的定義,而且必須針對服務之間的互動定義相同的整體結構,但是應用程式不必同時執行,也不需在同一個 SQL Server 執行個體內執行或共用實作詳細資料。應用程式不需要瞭解交談中其他參與者的實體位置或實作。
Service Broker 元件
Service Broker 有三種類型的元件:
- **交談元件:**交談群組、交談和訊息組成 Service Broker 應用程式的執行時期結構。應用程式會作為交談的一部份來交換訊息。每個交談都是一個交談群組的一部份,而交談群組可以包含多個交談。Service Broker 交談是一種對話,也就是說,只在兩個參與者之間進行的交談。如需有關交談元件的詳細資訊,請參閱<交談架構>。
- **服務定義元件:**這些是設計階段元件,指定應用程式所使用之交談的基本結構。它們定義應用程式的訊息類型、應用程式的交談流程,以及應用程式的資料庫儲存體。如需有關服務定義元件的詳細資訊,請參閱<服務架構>。
- **網路和安全性元件:**這些元件定義有關在 SQL Server 執行個體之外交換訊息的基礎結構。為了協助資料庫管理員管理變更環境,Service Broker 可讓管理員自行設定這些元件,而不依賴應用程式的程式碼。如需有關網路和安全性元件的詳細資訊,請參閱<網路和遠端安全性>。
服務定義元件、網路元件和安全性元件是資料庫和 SQL Server 執行個體之中繼資料的一部份。交談群組、交談和訊息是資料庫所包含之資料的一部份。
請參閱
概念
其他資源
Service Broker 架構
Service Broker Activation
Service Broker 的安全性考量
Service Broker 教學課程