消息隊(duì)列在VB.NET數(shù)據(jù)庫開發(fā)中的應(yīng)用

字號(hào):

我們先簡單的了解一下什么是消息隊(duì)列(MSMQ)?消息隊(duì)列是 Windows 2000(NT也有MSMQ,WIN95/98/me/xp不含消息隊(duì)列服務(wù)但是支持客戶端的運(yùn)行)操作系統(tǒng)中通訊的基礎(chǔ),也是用于創(chuàng)建分布式、松散連接通訊應(yīng)用程序的工具。這些應(yīng)用程序可以通過不同種類的網(wǎng)絡(luò)進(jìn)行通訊,也可以與脫機(jī)的計(jì)算機(jī)通訊。
    消息隊(duì)列分為用戶創(chuàng)建隊(duì)列和系統(tǒng)隊(duì)列,用戶隊(duì)列分為:
    1."公共隊(duì)列"在整個(gè)可傳遞消息的"消息隊(duì)列"網(wǎng)絡(luò)中復(fù)制并傳輸,并且有可能由網(wǎng)絡(luò)連接的所有站點(diǎn)訪問。
    2."專用隊(duì)列"不在整個(gè)網(wǎng)絡(luò)中發(fā)布。相反,它們僅在所駐留的本地計(jì)算機(jī)上可用。專用隊(duì)列只能由知道隊(duì)列的完整路徑名或標(biāo)簽的應(yīng)用程序訪問。
    3."管理隊(duì)列"包含確認(rèn)在給定"消息隊(duì)列"網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的消息。指定希望 MessageQueue 組件使用的管理隊(duì)列。
    4."響應(yīng)隊(duì)列"包含目標(biāo)應(yīng)用程序接收到消息時(shí)返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希望 MessageQueue 組件使用的響應(yīng)隊(duì)列。
    系統(tǒng)隊(duì)列分為:
    1."日記隊(duì)列"可選地存儲(chǔ)發(fā)送消息的副本和從隊(duì)列中移除的消息副本。
    2."死信隊(duì)列"存儲(chǔ)無法傳遞或已過期的消息的副本。
    3."專用系統(tǒng)隊(duì)列"是一系列存儲(chǔ)系統(tǒng)執(zhí)行消息處理操作所需的管理和通知消息的專用隊(duì)列。
    現(xiàn)在大家對(duì)消息隊(duì)列有了簡單的了解后,就該進(jìn)入主題了。要使用msmq進(jìn)行軟件開發(fā)需要安裝msmq。安裝完后就該進(jìn)入實(shí)際的開發(fā)階段。先打開vs.net ide中的"服務(wù)起資源管理器"展開你想建立消息隊(duì)列的計(jì)算機(jī)名,再展開"消息隊(duì)列"右擊它在彈出菜單中選擇"新建"建立一個(gè)新的消息隊(duì)列,并為它指定一個(gè)名字,這個(gè)名字可以隨意。也可以通過編程來完成,代碼如下:
    system.Messaging.MessageQueue.Create(".\Private$\MyPrivateQueue")'建立專用隊(duì)列
    System.Messaging.MessageQueue.Create("myMachine\MyQueue")'建立公共隊(duì)列
    其實(shí)我認(rèn)為使用那中方法并不重要,重要的是搞清楚專用隊(duì)列和公共隊(duì)列的差別(其他隊(duì)列不是必須的)。在本例中是通過"服務(wù)器資源管理器"分別在服務(wù)器上建立了專用隊(duì)列和公共隊(duì)列。
    程序功能:本程序分為兩部分包括服務(wù)器程序(安裝在sql server服務(wù)器上)和客戶端程序,客戶端的作用是用來編寫t-sql語句并將t-sql語句放在消息中,并將消息發(fā)送到sql server服務(wù)器上的消息隊(duì)列中去。服務(wù)器程序檢查指定的消息隊(duì)列當(dāng)發(fā)現(xiàn)有新消息到達(dá)時(shí),就開始執(zhí)行消息中的內(nèi)容,由于消息中的內(nèi)容是t-sql語句所以服務(wù)器端實(shí)際上是執(zhí)行對(duì)數(shù)據(jù)庫的操作。
    客戶端程序:
    public Sub client()
    Dim tM As New System.Messaging.MessageQueue()
    tM.Path = ".\Private$\jk" '"FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"'與指定計(jì)算機(jī)中的消息隊(duì)列建立連接,
    Dim newMessage As New System.Messaging.Message(TextBox1.Text)'接受文本筐的t-sql語句
    newMessage.Label = "This is the label"'消息名字,
    tM.Send(newMessage)'發(fā)送消息
    End Sub
    服務(wù)端程序:
    public Sub server()
    Dim NewQueue As New System.Messaging.MessageQueue(".\Private$\jk")'"FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"'與指定計(jì)算機(jī)中的消息隊(duì)列建立連接,
    Dim m As System.Messaging.Message
    查看消息隊(duì)列中的消息
    m = NewQueue.Receive
    m.Formatter = New System.Messaging.XmlMessageFormatter(New String() {"System.String,mscorlib"})
    Dim st As String
    st = m.Body'消息隊(duì)列中消息的消息內(nèi)容。既sql語句
    Dim con As New OleDb.OleDbConnection("輸入自己的數(shù)據(jù)庫連接字符串")
    con.Open()
    Dim com As New OleDb.OleDbCommand(st, con)'執(zhí)行消息中的sql語句
    com.ExecuteNonQuery()
    con.Close()
    End Sub