基於SQL Server 2008 Service Broker構建企業級消息系統|企業級管理軟件快速開發平臺

1、引言
Microsoft 在SQL Server 2005引入了服務代理 (Service Broker 簡稱SSB) 爲技術支持代理設計模式和麪向消息的中間件 (MOM) 的原則。Service Broker在SQL Server 2008上得到完善, SQL Server Service Broker 爲消息和隊列應用程序提供 SQL Server 數據庫引擎本機支持。這使開發人員可以輕鬆地創建使用數據庫引擎組件在完全不同的數據庫之間進行通信的複雜應用程序。開發人員可以使用 Service Broker 輕鬆生成可靠的分佈式應用程序。使用 Service Broker 的應用程序開發人員無需編寫複雜的內部通信和消息,即可跨多個數據庫分發數據工作負荷。因爲 Service Broker 會處理會話上下文中的通信路徑,所以這就減少了開發和測試工作。同時還提高了性能。
企業系統和網站系統都需要處理大量的郵件、短信等消息通知系統。在進行系統設計時,除了對安全、事務等問題給與足夠的重視外,性能也是一個不可避免的問題所在,必須充分地考慮訪問量、數據流量、服務器負荷的問題。解決性能的瓶頸,除了對硬件系統進行升級外,軟件設計的合理性尤爲重要。對於一些實時性不是很高的模塊我們可以使用了消息隊列技術來完成異步處理,利用消息隊列臨時存放要操作的數據,將隊列的數據進行異步的處理。本文基於SQL Server 2008 Service Broker、WCF、Windows 服務以及調度框架Quartz.NET實現一個消息通知系統。
2、消息隊列
2.1 隊列在異步運作的架構中是非常常用的數據結構
基於消息的應用程序的工作方式是提交一條消息,應用程序執行其工作。然後,再檢查看是否收到確認消息已得到處理的信息。如果你的應用程序充滿了待處理的請求,通常應該增加另外一條處理隊列來緩解系統的總體處理壓力。微軟消息隊列(MSMQ)提供一個開發這類應用程序的框架。它使得應用程序可以在不同種類的網絡間進行通信,並且需要保證消息傳送(guaranteed message delivery)、路由和可配置安全。過去20年來,我們對關係數據庫系統的依賴程度顯著增加。最初,存儲數據並對數據進行某種處理,是建立商業關係數據庫系統的主要目的。隨着關係數據庫系統的發展,其功能和複雜性的變化,它的主要用途已由單一數據存儲轉變爲更加主流的商業智能目的、更加複雜的ETL處理、數據報告、數據通知;微軟認爲,允許你在數據庫內建立基於消息的應用程序,這樣纔有意義。Service Broker是SQL Server 2005中新添加的基礎程序,在SQL Server 2008上得到加強,主要用於在數據庫引擎內建立基於消息的應用程序。SQL Server Service Broker是以數據表來實現隊列,並提供標準的T-SQL操作方式,讓系統設計人員可以善用消息溝通的特色設計應用程序。Service Broker應用程序以鬆散連接的應用程序而開發,它具有高度可擴展性,並提供其它消息平臺所不具備的功能,如消息組協調和鎖定。這些應用程序充分支持事務,並能夠跨越數據庫實例和服務器。SQL Server 2008 Service Broker支持的消息可以達到2G,支持SQL的varbinary 和varbinary(max)數據類型,支持消息優先級,而且“飢餓機制”保障較低優先級的消息也有機會獲得發送。
2.2 消息系統架構
消息的整體架構上分爲三部分,消息系統客戶端,消息隊列系統,消息隊列發送程序,序列圖如下:
客戶端準備好消息,通過消息客戶端接口發送到消息隊列系統,消息隊列發送程序定時輪詢獲取消息進行發送,發送的過程中發生錯誤重新放入隊列,發送成功的隊列歸檔到消息數據庫。以郵件發送爲例在具體的實現的流程如下:
上述多個部分協作,共同完成消息的發送任務,在本實現方案總共有六個部分,以下對這幾個部分進行詳細描述。
消息體MessageBase
自定義消息體的好處很多,採用自己定義的格式可以節省通信的傳遞量等等,也是這個消息系統的消息合約。
上面圖中我們可以看到我們定義了3種常見的消息類型:郵件、短信和RTX(騰訊通RTX是騰訊公司推出的企業級即時通信平臺),可以根據需要靈活的擴展企業消息的類型。
客戶端組件
客戶端組件負責驗證消息和將消息輸入消息隊列系統,爲了支持在整個企業環境提供服務,採用WCF方式發佈,採用TCP和SOAP方式發佈,TCP方式的客戶端通過.NET組件包發佈,另外通過SOAP方式發佈的標準Web Service支持其他跨平臺(C++/Java/PHP/Python/Ruby)的調用,同時爲調用進行服務的驗證,需要使用消息服務的業務系統首先需要在系統中註冊,獲得服務調用的appkey,通過SOAP Header進行傳遞,服務端依據系統的註冊信息(appkey和註冊的系統服務器IP)進行驗證。
SQL Server 2008 Service Broker隊列系統
SQL Server 2008 Service Broker支持會話優先級,可以支持1到10的10個優先級,爲目標服務創建10個優先級,只有一個約定,但每個級別都有單獨的發起方服務。所有發起方服務都與一箇中心目標服務通信。在系統的中分配了高(8)中(5)低(2)三個優先級,消息也有一個優先級高(1)中(0)低(-1),進入消息系統的優先級等於系統優先級+消息優先級,這樣就使用了1-9優先級,10優先級爲系統保留優先級,這樣就可有效的利用Service Broker的優先級和控制業務系統對消息優先級的使用。
消息處理器
消息處理器從隊列中取出消息,進行發送處理,發送失敗的消息重新放回隊列,並增加重試次數計數,當重試計數超過最大的重試次數,進行歸檔處理,發送成功的消息進行歸檔處理。每個月的數據分表存儲,避免數據量過大的系統性能損耗。

發佈了85 篇原創文章 · 獲贊 1 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章