導讀:本文主要涉及Service Broker的基本概念及建立一個Service Broker應用程序的基本步驟。
一、前言 :
Service Broker為SQL Server提供消息隊列,這提供了從數據庫中發送異步事務性消息隊列的方法。Service Broker消息可以保證以適當的順序或原始的發送順序不重復地一次性接收。并且因為內建在SQL Server中,這些消息在數據庫發生故障時是可以恢復的,也可以隨數據庫一起備份。在SQL Server 2008中,還引入了使用Create Broker Priority命令對會話設定優先級,可以對重要的或不重要的會話進行優先級設定,以保證消息合理地處理。
本文假定一個在線數據庫BookStore中存儲了一些業務訂單。我們使用Service Broker應用程序將消息發送到另一個數據庫BookDistribution,該數據庫是分離的應用程序調用,該應用程序控制倉庫入庫和出庫交付, 并返回消息給BookStore。
創建Service Broker應用程序大體步驟如下:
1、定義希望應用程序執行的異步任務。
2、確定Service Broker的發起方服務和目標服務是否創建在同一個SQL Server實例中。如果是兩個實例,實例間的通信還需要創建經過證書認證或NT安全的身份認證,并且要創建端點、路由以及對話安全模式。
3、如果沒有啟用,則在多方參與的數據庫中使用Alter Database命令設置Enable_broker以及Truseworthy數據庫選項。
4、為所有多方參與的數據庫創建數據庫主密鑰。
5、創建希望在服務之間發送的消息類型。
6、創建契約(Contract)來定義可以由發起方發送的各種消息以及由目標發送的消息類型的種類。
7、同時在兩方參與的數據庫中創建用于保存消息的隊列。
8、同時在綁定特定約定到特定隊列的多方參與的數據庫中創建服務。
二、實例
下面我們通過一個示例來實現以上步驟:
(一)、啟用數據庫的Service Broker活動
(二)、創建數據庫主密鑰
(三)、管理消息類型
使用CREATE MESSAGE TYPE( http://msdn.microsoft.com/en-us/library/ms187744.aspx )命令,
--注意,此處沒有定義消息的內容。實際的消息是消息類型的實例。
(四)、創建契約(Contract)
使用Create Contract( http://msdn.microsoft.com/en-us/library/ms178528.aspx )
--發起方和目標的定義必須相同
(五)、創建隊列
隊列用來保存數據。使用命令Create queue( http://msdn.microsoft.com/en-us/library/ms190495.aspx )
(六)、創建服務
服務定義端點,然后使用它來將消息隊列綁定到一個或多個契約上。服務使用隊列和契約來定義一個或一組任務。有點拗口,是不是?
服務是消息的發起方和接收方強制約定的規則,并將消息路由到正確的序列。
使用Create Service( http://msdn.microsoft.com/en-us/library/ms190332.aspx )命令。
(七)、啟動對話
對話會話(dialog conservation)是在服務之間進行消息交換的操作。
使用Begin Dialog Conversation( http://msdn.microsoft.com/en-us/library/ms187377.aspx ) 命令創建新的會話。使用Send( http://msdn.microsoft.com/en-us/library/ms188407.aspx )來發送消息。使用End Conversation命令( http://msdn.microsoft.com/en-us/library/ms177521.aspx )結束會話。
(八)、查詢隊列中傳入的消息
查詢結果:
(九)、檢索并響應消息
使用Receive語句( http://msdn.microsoft.com/en-us/library/ms186963.aspx )從隊列中讀取行(消息),也可以刪除已經讀取的消息。Receive的結果可以填充到常規表中,也可以在局部變量中執行其他操作,或發送到其他service Broker消息。如果消息是XML數據類型的消息,則可以直接借助TSQL的XQuery來操作。
(十)、結束會話
三、小結
本文通過一個實例演示了一個用來發送圖書訂單消息分發控制數據庫的簡單的消息交換應用程序。發起方發送圖書訂單,發回一個響應,并在兩個數據庫上使用END Conservation結束會話?,F實場景中可以轉換為其他消息類型、契約、服務和隊列。合理運用Service Broker應用程序的異步特性可以防止因應用程序掛起而導致業務系統產生瓶頸。
本文參考:
1、SQL Server 2005 Service Broker 初探
http://msdn.microsoft.com/zh-cn/library/ms345108%28v=sql.90%29.aspx
2、SQL Server 2008 Transact-SQL Recipes: A Problem-Solution Approach
http://www.amazon.com/Server-2008-Transact-SQL-Recipes-Problem-Solution/dp/1590599802
助人等于自助! 3w@live.cn
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
