我們先簡單的了解一下什么是消息隊(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
消息隊(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