ASP.NET Core 監聽SQL Server數據庫的實時信息

1.開發環境:

  • 開發工具:Visual Studio 2019
  • 數據庫:SQL Server2012
  • 開發環境:.Net Core 3.1

2.使用技術:

  • Signalr:實現消息推送
  • SqlDependency:經過它的OnChangeEventHandler事件去監聽數據庫的波動【只針對SQL Serer】
  • Microsoft.EntityFrameworkCore:鏈接數據庫

3.業務邏輯(雖然最後沒作成,可是這技術我還學會了)

開發場景:
客戶須要每個參加展會的人,簽到時候,須要在展會的大屏幕實時顯示簽到人的信息。
html

思考:
若是讓之前的我作,一想到就是作AJAX異步請求數據,設置循環間隔時間。可是這樣會有問題,第一若是時間設置太長,沒法實現實時,若是時間設置過短,會發送不少無效的請求大量佔用資源,這個時間就沒法去定義。
數據庫

思路:
此時,我在想,若是要是【有人盯着】數據庫,當數據有變化的時候,【有人通知】能通知咱們,這樣豈不是完美了,敢想就敢幹,Just Doing!
瀏覽器

4.使用的技術講解

有人盯着:

經過在百度海洋的搜索,瞭解到了SqlDependency能夠實現這個效果,鏈接數據庫以後,編寫查詢語句【有注意點,後面講】,而後使用SqlCommand初始化鏈接對象和執行的語句,在將SqlDependency初始化填入SqlCommand對象,而後給SqlDependency添加事件,而後執行SqlCommand命令。當數據庫的某張表數據變更,就會觸發SqlDependency添加的事件。緩存

有人通知:

Signalr能夠實現推送消息,應用程序啓動以後,瀏覽器和服務器會創建一個鏈接(Signalr不懂能夠百度看看原理),當服務器有什麼須要推送的,能夠推送指定的人、組,以及全部人。服務器

5.效果展現

6.注意事項

  • 編寫的SQL:查詢語句中不能使用 *,表名要加[dbo].[xx]
  • 在你的數據庫中須要開啓BROKER:
ALTER DATABASE [你須要監聽的數據庫的表名稱] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [你須要監聽的數據庫的表名稱] SET ENABLE_BROKER;

在數據庫執行命上面兩個命令。併發

  • 建立GlobalHubServer服務,用戶獲取實例對象(當咱們監聽到數據庫變更的時候,咱們須要通知,能夠經過GlobalHubServer和咱們的ChatHub實現依賴注入,這樣容器給我建立了一個實例,咱們只須要注入就好了)。
  • Signalr中自定義的方法,注意格式駝峯命令法
  • SqlDependency須要提起開啓

7.參考文檔

8.不足的地方

這個只是測試代碼,若是在實際狀況中,不知道會不會出問題,打算使用Redis作緩存,處理併發的請求,後面有時間寫個API,進行接口壓力測試一下效果,若是有好的方案,歡迎來探討!異步

9.結尾

爲何沒貼代碼了,你看看我給的幾個文檔就能夠作出來,動手實踐纔是硬道理,若是有功能實現不了的,能夠給我留言!工具

相關文章
相關標籤/搜索