您可以/應該將 SQL Server Service Broker 與 .NET 應用程序一起使用嗎?
我在數據庫中有許多需要觸發應用程式碼的操作。目前我正在使用數據庫輪詢,但我聽說 SQL Server Service Broker 可以為我提供類似 MSMQ 的功能。
- 我可以從執行在不同機器上的 .NET 應用程序監聽 SQL Server Service Broker 隊列嗎?
- 如果是這樣,我應該這樣做嗎?
- 如果沒有,你會推薦什麼?
要回答您的問題:
我可以從執行在不同機器上的 .NET 應用程序監聽 SQL Server Service Broker 隊列嗎?
是的。
如果是這樣,我應該這樣做嗎?
如果沒有,你會推薦什麼?
您可以考慮使用
SqlDependency. 它在幕後使用 Service Broker,但不明確。您可以使用查詢或儲存過程註冊
SqlDependency對象。SELECT如果另一個命令更改了從查詢返回的數據,則會觸發一個事件。您可以註冊一個事件處理程序,並在那時執行您喜歡的任何程式碼。或者,您可以使用SqlCacheDependency,它只會在事件觸發時從記憶體中刪除關聯的對象。您也可以直接使用 Service Broker。但是,在這種情況下,您將需要發送和接收自己的消息,就像使用 MSMQ 一樣。
在負載平衡的環境中,
SqlDependency適用於程式碼需要在每個 Web 伺服器上執行的情況(例如刷新記憶體)。對於程式碼而言,Service Broker 消息比只執行一次更好——例如發送電子郵件。如果有幫助,我會在我的書中 ( Ultra-Fast ASP.NET ) 中通過範例詳細介紹這兩個系統。
SSB (SQL Service Broker) 有一個名為Activation的功能,它可以將儲存過程附加到隊列。當隊列中有消息要使用時,SQL Server 將在內部執行此過程。隊列附加過程可以是 CLR 過程,使託管程式碼業務邏輯模組能夠執行(C#、VB.Net 等)。
內部啟動的儲存過程的替代方法是讓外部客戶端使用
WAITFOR(RECEIVE ... )語句“偵聽”隊列。此語法對於 SSB 是特殊的,並且會執行非池化塊,直到有消息要接收。然後應用程序將接收到的消息作為普通的 T-SQL 結果集(如 SELECT)使用。還有一個用於 Service Broker 的 External Activator範例,它利用事件通知機制來了解何時啟動應用程序以使用隊列中的消息。如果您想查看利用 SSB 內部啟動的 T-SQL 程式碼範例,請查看非同步過程執行。