訊息佇列在VB.NET資料庫開發中的應用

來源:互聯網
上載者:User
資料|資料庫   我們先簡單的瞭解一下什麼是訊息佇列(MSMQ)?訊息佇列是 Windows 2000(NT也有MSMQ,WIN95/98/me/xp不含訊息佇列服務但是支援用戶端的運行)作業系統中通訊的基礎,也是用於建立分布式、鬆散串連通訊應用程式的工具。這些應用程式可以通過不同種類的網路進行通訊,也可以與離線的電腦通訊。訊息佇列分為使用者建立隊列和系統隊列,使用者隊列分為:

  · "公用隊列"在整個可傳遞訊息的"訊息佇列"網路中複製並傳輸,並且有可能由網路連接的所有網站訪問。

  · "專用隊列"不在整個網路中發布。相反,它們僅在所駐留的本機電腦上可用。專用隊列只能由知道隊列的完整路徑名或標籤的應用程式訪問。

  · "管理隊列"包含確認在給定"訊息佇列"網路中發送的訊息回執的訊息。指定希望 MessageQueue 組件使用的管理隊列

  · "響應隊列"包含目標應用程式接收到訊息時返回給發送應用程式的響應訊息。指定希望 MessageQueue 組件使用的響應隊列。

  系統隊列分為:

  · "日記隊列"可選地儲存發送訊息的副本和從隊列中移除的訊息副本。

  · "無效信件佇列"儲存無法傳遞或已到期的訊息的副本。

  · "專用系統隊列"是一系列儲存系統執行訊息處理操作所需的管理和通知訊息的專用隊列。

  現在大家對訊息佇列有了簡單的瞭解後,就該進入主題了。要使用msmq進行軟體開發需要安裝msmq。安裝完後就該進入實際的開發階段。先開啟vs.net ide中的"服務起資源管理員"展開你想建立訊息佇列的電腦名稱,再展開"訊息佇列"右擊它在快顯功能表中選擇"建立"建立一個新的訊息佇列,並為它指定一個名字,這個名字可以隨意。也可以通過編程來完成,代碼如下:

system.Messaging.MessageQueue.Create(".\Private$\MyPrivateQueue")'建立專用隊列
System.Messaging.MessageQueue.Create("myMachine\MyQueue")'建立公用隊列

  其實我認為使用那中方法並不重要,重要的是搞清楚專用隊列和公用隊列的差別(其他隊列不是必須的)。在本例中是通過"伺服器總管"分別在伺服器上建立了專用隊列和公用隊列。

  程式功能:本程式分為兩部分包括伺服器程式(安裝在sql server伺服器上)和用戶端程式,用戶端的作用是用來編寫t-sql語句並將t-sql語句放在訊息中,並將訊息發送到sql server伺服器上的訊息佇列中去。伺服器程式檢查指定的訊息佇列當發現有新訊息到達時,就開始執行訊息中的內容,由於訊息中的內容是t-sql語句所以伺服器端實際上是執行對資料庫的操作。

  用戶端程式:


public Sub client()
Dim tM As New System.Messaging.MessageQueue()
tM.Path = ".\Private$\jk" '"FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"'與指定電腦中的訊息佇列建立串連,
Dim newMessage As New System.Messaging.Message(TextBox1.Text)'接受文本筐的t-sql語句
newMessage.Label = "This is the label"'訊息名字,
tM.Send(newMessage)'發送訊息
End Sub

  服務端程式:


public Sub server()
Dim NewQueue As New System.Messaging.MessageQueue(".\Private$\jk")'"FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"'與指定電腦中的訊息佇列建立串連,
Dim m As System.Messaging.Message
'查看訊息佇列中的訊息
m = NewQueue.Receive
m.Formatter = New System.Messaging.XmlMessageFormatter(New String() {"System.String,mscorlib"})
Dim st As String
st = m.Body'訊息佇列中訊息的訊息內容。既sql語句
Dim con As New OleDb.OleDbConnection("輸入自己的資料庫連接字串")
con.Open()
Dim com As New OleDb.OleDbCommand(st, con)'執行訊息中的sql語句
com.ExecuteNonQuery()
con.Close()
End Sub

  我為什麼要使用訊息佇列來處理資料庫的操作這個問題我一直沒回答,現在我就來回答這個問題。在本程式中你會發現在sub client()中我並沒串連資料庫和請求資料,而是通過發訊息來操作資料庫的,這個好處是節省了兩部分時間:

  1、對資料庫連解請求資料的時間。

  2、從資料庫返回資料的時間。

  在很多情況下其實我們並不需要看見具體的資料就知道該怎麼修改資料庫中的資料。例如要刪除張三的記錄,就可以將一條簡單的刪除語句放入訊息中,發給伺服器讓伺服器程式去處理對資料的更改。

  此外訊息佇列的另一個主要用途也就是當前erp軟體中必不可少的,就是在中斷連線時儲存資訊,當串連恢複時發送訊息。訊息在如下兩種情況中無法迅速地傳遞到它們的隊列:當隊列駐留的電腦無法工作時,或當路由訊息所需的網域控制站無法工作時。"訊息佇列"可讓您應對這些情況,使得在從網路上中斷連線或必要的電腦或控制器無法工作時,仍可以繼續發送訊息。在這些情形下,訊息暫時儲存在本機電腦或傳遞路由上的某個電腦的隊列中,直到完成傳遞所需的資源重新聯機。

  例如,假設有一個記錄所有在出差的銷售人員發送的訂單的中央隊列。這些銷售人員每天的大部分時間都以中斷連線的方式工作,記錄來自客戶網站的訂單資訊,並且每天撥號連線一次,將所有這些資訊傳輸到中央隊列中。因為訊息在發送方中斷連線時仍可發送到隊列,所以銷售人員可以在記錄客戶資訊時立即發送他們的訊息,但系統會緩衝這些訊息直到晚間進行撥號連線為止。

  在中斷連線時要怎麼儲存訊息呢?向中斷連線的隊列發送訊息同向可用隊列發送訊息的過程幾乎完全相同。當要向其發送的隊列不可用時,不必進行任何特殊的配置以使組件將訊息儲存在暫存佇列中。在client代碼的tM.Path = ".\Private$\jk"後面有一條備註陳述式,其實這條語句就是實現向中斷連線的隊列發送訊息的功能。只要將tM.Path = ".\Private$\jk"這條語句換成tM.Path = "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"其中PUBLIC後面的數字是要發送到電腦的guid數字。這個數字可以開啟那台電腦的訊息佇列的屬性看見。使用這種方法就可以在中斷連線的情況下保證對伺服器的操作是有效。現在運行這個程式後,開啟win2000中的"開始"-》"程式"-》"管理工具"-》"電腦管理"。在"電腦管理"視窗中展開"服務和應用程式"-》"訊息佇列"-》"傳出隊列",你將在右邊的視窗中看見你建立的訊息。(如果你使用tM.Path = ".\Private$\jk"語句,在"電腦管理"視窗中展開"服務和應用程式"-》"訊息佇列"-》"專用隊列"可以看見你建立的隊列。)

  其實訊息佇列的編程並不複雜,但它在網路環境的程式開發中是非常有用的,可以簡化大量的開發過程和節省開發時間。

  其實訊息佇列的編程有很大的靈活性,幾乎可以解決網路編程的大部分問題。比如聊天程式,遠端控制程式。

  本文針對訊息佇列做了一個簡單的介紹,並舉了一個例來說明怎麼在.net下使用訊息編程,達到快速高效穩定的對資料庫進行操作。最後補充要說的是在internet中也一樣可以使用訊息佇列,只需要將tM.Path = "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75語句後面的數字變成訊息佇列所在伺服器的數字就可以了。但是要提醒大家的是使用訊息在傳輸時將佔有大量的頻寬,所以在不是必須的時候,internet下的編程不要使用訊息。

  在vb.net、win2000 、sql server 2000下通過。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。