使用 Service Broker 建立應用程式
可執行 Transact-SQL 陳述式的任何程式都可以使用 Service Broker。Service Broker 應用程式可以做為在 SQL Server 之外執行的程式來實作,或做為使用 Transact-SQL 或 .NET 語言撰寫的預存程序來實作。
通常,使用 Service Broker 的程式由一起運作來完成某項工作的數個元件所組成。起始交談的程式會建立訊息並將其傳送至另一個服務。該程式可能會等待回應,也可能會立即結束而依賴於另一個程式來處理回應。如果某個服務是交談的目標,則程式會從該服務的佇列接收內送訊息、讀取訊息資料、執行一切必要的處理,然後建立並傳送回應訊息 (如有必要)。
Service Broker 擴充了 Transact-SQL。應用程式不需要特殊物件模型或程式庫,就可以使用 Service Broker。但是,程式會將 Transact-SQL 命令傳送至 SQL Server,並處理這些命令的結果。應用程式可以由 Service Broker 啟動、可以做為背景服務也可以做為排程作業來執行,或者還可以啟動來回應事件。如需有關啟動使用 Service Broker 的應用程式之策略的詳細資訊,請參閱<選擇啟動策略>。
如需有關使用 Service Broker 建立應用程式的資訊,請參閱<使用 Service Broker 進行程式設計的優點>。
Service Broker 應用程式概觀
下圖顯示使用 Service Broker 之應用程式中的互動:
如圖所示,首先建立 SubmitExpense、AcceptDenyExpense 和 ReimbursementIssued 訊息類型。ProcessExpenses 合約會以這些訊息類型為基礎建立,它提供結構描述用以完成費用補償工作的交談。ProcessExpenses 合約管理 ProcessExpense 服務與 SubmitExpense 服務之間的所有交談。ProcessExpenses 合約及其使用的訊息類型,必須存在於以此合約為基礎所進行交談之所有服務的資料庫中。
Service Broker 會將傳送至 SubmitExpense 服務的訊息儲存於該服務的佇列上。ExpenseSubmission 預存程序會從此佇列接收訊息、對其進行處理,並在需要回覆時將訊息傳送至另一個服務。
Service Broker 會將傳送至 ProcessExpense 服務的訊息儲存於該服務的佇列上。ExpenseProcessing 預存程序會從此佇列接收訊息、對其進行處理,並在需要回覆時將訊息傳送至另一個服務。
這兩個服務之間的交談將以下列方式建構:
使用者透過使用者介面提交費用補償要求。應用程式執行 ExpenseSubmission 預存程序,這會建立 SubmitExpense 訊息。SubmitExpense 服務啟動與 ProcessExpense 服務的交談,然後將 SubmitExpense 訊息傳送至 ProcessExpense 服務。
Service Broker 接收 ProcessExpense 服務的 SubmitExpense 訊息,並將訊息加入 ExpenseQueue 佇列。ExpenseQueue 佇列啟動 ProcessExpense 預存程序,這會將 SubmitExpense 訊息從佇列中移除並對其進行處理。然後,ProcessExpense 預存程序會建立 AcceptDenyExpense 訊息,並將此訊息傳送至 SubmitExpense 服務。如果拒絕費用,則 ProcessExpense 預存程序會結束交談。
Service Broker 將 SubmitExpense 服務的 AcceptDenyExpense 訊息加入該服務的佇列。如果 ProcessExpense 程序結束交談,則 Service Broker 會將 EndDialog 訊息加入 Expenses 佇列。佇列啟動 ExpenseSubmission 預存程序,這會將 AcceptDenyExpense 訊息從佇列中移除並對其進行處理。如果 ExpenseSubmission 預存程序在佇列中發現 EndDialog 訊息,則該程序會結束交談。
如果接受費用,則 ProcessExpense 服務會建立並傳送確認費用支付已發出的 ReimbursementIssued 訊息,然後結束交談。Service Broker 會將這些訊息加入該服務的佇列。佇列啟動 ExpenseSubmission 程序,該程序會處理 ReimbursementIssued 訊息。然後,該程序會處理 EndDialog 訊息,並結束交談。