2012-04-27 100 views
4

我正在創建一個基於消息的架構,目前使用輪詢客戶端來檢索消息。出於顯而易見的原因,我想將我的客戶端註冊到SQL Server 2008,以便在將消息插入到表中時接收事件。SQL Server 2008事件驅動架構

我一直在圍繞Web研究SQL Server Message Broker,CLR存儲過程和StreamInsight,但似乎無法找到所需的東西:SQL Server提醒我的服務的一種方式已收到一條消息。基本上是事件驅動而不是輪詢模式。

這是存在嗎?任何想法從哪裏開始?有沒有例子?

回答

3

是的,這確實存在。我已經使用SQL Service Broker取得了成功。我不熟悉你列出的其他選項。

設置SSB很痛苦,因爲有太多的移動部件和細節,但它很好地工作。幫助您避免輪詢的主要部分是您從C#創建並調用的存儲過程。在這個簡短的程序中是一個RECEIVE WAITFOR語句,它阻止你的開放和事務處理連接,直到你的隊列中有一條消息可用,或者你的超時命中。在C#中,無論您是得到結果還是超時,都會立即再次運行該過程以等待下一個項目。

如果可能,您需要將打開的SQL連接數限制爲1。如果你有多個感興趣的團體,通過一個連接推送他們所有的東西,並通過其他方式將其分發給C#服務器。

+0

非常感謝!我已閱讀了RECEIVE WAITFOR,但我希望能夠註冊一個可以在觸發器內調用的WCF端點。 我不喜歡阻塞線程並保持數據庫連接打開的想法。我想我只會使用一個輪詢客戶端,因爲我將至少有三個不同的客戶端檢查消息;其中每一個將在不同的機器上至少有2個實例用於擴展和故障轉移。這是一個企業應用程序。 我可以使用一個客戶端來使用RECEIVE WAITFOR,但其中一個意味着一個故障點;我絕對不想要。 – NickV 2012-04-27 15:52:07

+0

那麼,開放的連接並不是那麼糟糕。這不是一個「真實」的東西,在等待的時候沒有交通。 SQL不能推出,所以你留下了這個或者輪詢(如你所知),輪詢在一天中的更多流量和更多的開放連接,這取決於你的事件頻率和最小分辨率。 – 2012-04-27 17:15:28

+0

聽起來不錯。我喜歡關於「在一天中更多交通和更多開放聯繫」的觀點。我不期待太多的等待時間! – NickV 2012-04-27 17:31:26