您好,登錄后才能下訂單哦!
這篇文章主要介紹VB.NET消息隊(duì)列是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
消息隊(duì)列是 Windows 2000(NT也有MSMQ,WIN95/98/ME/XP不含消息隊(duì)列服務(wù)但是支持客戶(hù)端的運(yùn)行)操作系統(tǒng)中通訊的基礎(chǔ),也是用于創(chuàng)建分布式、松散連接通訊應(yīng)用程序的工具。這些應(yīng)用程序可以通過(guò)不同種類(lèi)的網(wǎng)絡(luò)進(jìn)行通訊,也可以與脫機(jī)的計(jì)算機(jī)通訊。VB.NET消息隊(duì)列分為用戶(hù)創(chuàng)建隊(duì)列和系統(tǒng)隊(duì)列,用戶(hù)隊(duì)列分為:
· "公共隊(duì)列"在整個(gè)可傳遞消息的VB.NET消息隊(duì)列網(wǎng)絡(luò)中復(fù)制并傳輸,并且有可能由網(wǎng)絡(luò)連接的所有站點(diǎn)訪問(wèn)。
· "專(zhuān)用隊(duì)列"不在整個(gè)網(wǎng)絡(luò)中發(fā)布。相反,它們僅在所駐留的本地計(jì)算機(jī)上可用。專(zhuān)用隊(duì)列只能由知道隊(duì)列的完整路徑名或標(biāo)簽的應(yīng)用程序訪問(wèn)。
· "管理隊(duì)列"包含確認(rèn)在給定"消息隊(duì)列"網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的消息。指定希望 MessageQueue 組件使用的管理隊(duì)列
· "響應(yīng)隊(duì)列"包含目標(biāo)應(yīng)用程序接收到消息時(shí)返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希望 MessageQueue 組件使用的響應(yīng)隊(duì)列。
系統(tǒng)隊(duì)列分為:
· "日記隊(duì)列"可選地存儲(chǔ)發(fā)送消息的副本和從隊(duì)列中移除的消息副本。
· "死信隊(duì)列"存儲(chǔ)無(wú)法傳遞或已過(guò)期的消息的副本。
· "專(zhuān)用系統(tǒng)隊(duì)列"是一系列存儲(chǔ)系統(tǒng)執(zhí)行消息處理操作所需的管理和通知消息的專(zhuān)用隊(duì)列。
現(xiàn)在大家對(duì)VB.NET消息隊(duì)列有了簡(jiǎn)單的了解后,就該進(jìn)入主題了。要使用MSMQ進(jìn)行軟件開(kāi)發(fā)需要安裝MSMQ。安裝完后就該進(jìn)入實(shí)際的開(kāi)發(fā)階段。先打開(kāi)IDE中的"服務(wù)器資源管理器"展開(kāi)你想建立消息隊(duì)列的計(jì)算機(jī)名,再展開(kāi)"消息隊(duì)列"右擊它在彈出菜單中選擇"新建"建立一個(gè)新的消息隊(duì)列,并為它指定一個(gè)名字,這個(gè)名字可以隨意。也可以通過(guò)編程來(lái)完成,代碼如下:
system.Messaging.MessageQueue
.Create(".\Private$\MyPrivateQueue")'建立專(zhuān)用隊(duì)列
System.Messaging.MessageQueue.
Create("myMachine\MyQueue")'建立公共隊(duì)列
其實(shí)我認(rèn)為使用哪種方法并不重要,重要的是搞清楚專(zhuān)用隊(duì)列和公共隊(duì)列的差別(其他隊(duì)列不是必須的)。在本例中是通過(guò)"服務(wù)器資源管理器"分別在服務(wù)器上建立了專(zhuān)用隊(duì)列和公共隊(duì)列。
程序功能:本程序分為兩部分包括服務(wù)器程序(安裝在SQL Server服務(wù)器上)和客戶(hù)端程序,客戶(hù)端的作用是用來(lái)編寫(xiě)t-sql語(yǔ)句并將t-sql語(yǔ)句放在消息中,并將消息發(fā)送到SQL Server服務(wù)器上的消息隊(duì)列中去。服務(wù)器程序檢查指定的VB.NET消息隊(duì)列當(dāng)發(fā)現(xiàn)有新消息到達(dá)時(shí),就開(kāi)始執(zhí)行消息中的內(nèi)容,由于消息中的內(nèi)容是t-sql語(yǔ)句所以服務(wù)器端實(shí)際上是執(zhí)行對(duì)數(shù)據(jù)庫(kù)的操作。
客戶(hù)端程序:
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語(yǔ)句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
'查看VB.NET消息隊(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語(yǔ)句Dim con As New OleDb.OleDbConnection
("輸入自己的數(shù)據(jù)庫(kù)連接字符串")con.Open()
Dim com As New OleDb.OleDbCommand
(st, con)'執(zhí)行消息中的sql語(yǔ)句com.ExecuteNonQuery()
con.Close()
End Sub
在本程序中你會(huì)發(fā)現(xiàn)在sub client()中我并沒(méi)連接數(shù)據(jù)庫(kù)和請(qǐng)求數(shù)據(jù),而是通過(guò)發(fā)消息來(lái)操作數(shù)據(jù)庫(kù)的,這個(gè)好處是節(jié)省了兩部分時(shí)間:
1、對(duì)數(shù)據(jù)庫(kù)連解請(qǐng)求數(shù)據(jù)的時(shí)間。
2、從數(shù)據(jù)庫(kù)返回?cái)?shù)據(jù)的時(shí)間。
在很多情況下其實(shí)我們并不需要看見(jiàn)具體的數(shù)據(jù)就知道該怎么修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。例如要?jiǎng)h除張三的記錄,就可以將一條簡(jiǎn)單的刪除語(yǔ)句放入消息中,發(fā)給服務(wù)器讓服務(wù)器程序去處理對(duì)數(shù)據(jù)的更改。
此外VB.NET消息隊(duì)列的另一個(gè)主要用途也就是當(dāng)前ERP軟件中必不可少的,就是在斷開(kāi)連接時(shí)保存信息,當(dāng)連接恢復(fù)時(shí)發(fā)送消息。消息在如下兩種情況中無(wú)法迅速地傳遞到它們的隊(duì)列:當(dāng)隊(duì)列駐留的計(jì)算機(jī)無(wú)法工作時(shí),或當(dāng)路由消息所需的域控制器無(wú)法工作時(shí)。"消息隊(duì)列"可讓您應(yīng)對(duì)這些情況,使得在從網(wǎng)絡(luò)上斷開(kāi)連接或必要的計(jì)算機(jī)或控制器無(wú)法工作時(shí),仍可以繼續(xù)發(fā)送消息。在這些情形下,消息暫時(shí)存儲(chǔ)在本地計(jì)算機(jī)或傳遞路由上的某個(gè)計(jì)算機(jī)的隊(duì)列中,直到完成傳遞所需的資源重新聯(lián)機(jī)。
例如,假設(shè)有一個(gè)記錄所有在出差的銷(xiāo)售人員發(fā)送的訂單的中央隊(duì)列。這些銷(xiāo)售人員每天的大部分時(shí)間都以斷開(kāi)連接的方式工作,記錄來(lái)自客戶(hù)站點(diǎn)的訂單信息,并且每天撥號(hào)連接一次,將所有這些信息傳輸?shù)街醒腙?duì)列中。因?yàn)橄⒃诎l(fā)送方斷開(kāi)連接時(shí)仍可發(fā)送到隊(duì)列,所以銷(xiāo)售人員可以在記錄客戶(hù)信息時(shí)立即發(fā)送他們的消息,但系統(tǒng)會(huì)緩存這些消息直到晚間進(jìn)行撥號(hào)連接為止。
在斷開(kāi)連接時(shí)要怎么保存消息呢?向斷開(kāi)連接的隊(duì)列發(fā)送消息同向可用隊(duì)列發(fā)送消息的過(guò)程幾乎完全相同。當(dāng)要向其發(fā)送的隊(duì)列不可用時(shí),不必進(jìn)行任何特殊的配置以使組件將消息存儲(chǔ)在臨時(shí)隊(duì)列中。在client代碼的tM.Path = ".\Private$\jk"后面有一條注釋語(yǔ)句,其實(shí)這條語(yǔ)句就是實(shí)現(xiàn)向斷開(kāi)連接的隊(duì)列發(fā)送消息的功能。只要將tM.Path = ".\Private$\jk"這條語(yǔ)句換成tM.Path = "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"其中PUBLIC后面的數(shù)字是要發(fā)送到計(jì)算機(jī)的guid數(shù)字。
這個(gè)數(shù)字可以打開(kāi)那臺(tái)計(jì)算機(jī)的消息隊(duì)列的屬性看見(jiàn)。使用這種方法就可以在斷開(kāi)連接的情況下保證對(duì)服務(wù)器的操作是有效?,F(xiàn)在運(yùn)行這個(gè)程序后,打開(kāi)計(jì)算機(jī)管理,在"計(jì)算機(jī)管理"窗口中展開(kāi)"服務(wù)和應(yīng)用程序"-》"消息隊(duì)列"-》"傳出隊(duì)列",你將在右邊的窗口中看見(jiàn)你建立的消息。(如果你使用tM.Path = ".\Private$\jk"語(yǔ)句,在"計(jì)算機(jī)管理"窗口中展開(kāi)"服務(wù)和應(yīng)用程序"-》"消息隊(duì)列"-》"專(zhuān)用隊(duì)列"可以看見(jiàn)你建立的隊(duì)列。)
其實(shí)消息隊(duì)列的編程并不復(fù)雜,但它在網(wǎng)絡(luò)環(huán)境的程序開(kāi)發(fā)中是非常有用的,可以簡(jiǎn)化大量的開(kāi)發(fā)過(guò)程和節(jié)省開(kāi)發(fā)時(shí)間。而且,消息隊(duì)列的編程有很大的靈活性,幾乎可以解決網(wǎng)絡(luò)編程的大部分問(wèn)題。比如聊天程序,遠(yuǎn)程控制程序。
本文針對(duì)VB.NET消息隊(duì)列做了一個(gè)簡(jiǎn)單的介紹,并舉了一個(gè)例來(lái)說(shuō)明怎么在.NET下使用消息編程,達(dá)到快速高效穩(wěn)定的對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。***補(bǔ)充要說(shuō)的是在Internet中也一樣可以使用消息隊(duì)列,只需要將tM.Path = "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75語(yǔ)句后面的數(shù)字變成消息隊(duì)列所在服務(wù)器的數(shù)字就可以了。但是要提醒大家的是使用消息在傳輸時(shí)將占有大量的帶寬,所以在不是必須的時(shí)候,Internet下的編程不要使用消息。
以上是“VB.NET消息隊(duì)列是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。