VB.NET消息隊(duì)列是什么

這篇文章主要介紹VB.NET消息隊(duì)列是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)公司、重慶網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對服務(wù)酒店設(shè)計(jì)等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!

消息隊(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ī)通訊。VB.NET消息隊(duì)列分為用戶創(chuàng)建隊(duì)列和系統(tǒng)隊(duì)列,用戶隊(duì)列分為:

· "公共隊(duì)列"在整個(gè)可傳遞消息的VB.NET消息隊(duì)列網(wǎng)絡(luò)中復(fù)制并傳輸,并且有可能由網(wǎng)絡(luò)連接的所有站點(diǎn)訪問。

· "專用隊(duì)列"不在整個(gè)網(wǎng)絡(luò)中發(fā)布。相反,它們僅在所駐留的本地計(jì)算機(jī)上可用。專用隊(duì)列只能由知道隊(duì)列的完整路徑名或標(biāo)簽的應(yīng)用程序訪問。

· "管理隊(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ǔ)無法傳遞或已過期的消息的副本。

· "專用系統(tǒng)隊(duì)列"是一系列存儲(chǔ)系統(tǒng)執(zhí)行消息處理操作所需的管理和通知消息的專用隊(duì)列。

現(xiàn)在大家對VB.NET消息隊(duì)列有了簡單的了解后,就該進(jìn)入主題了。要使用MSMQ進(jìn)行軟件開發(fā)需要安裝MSMQ。安裝完后就該進(jìn)入實(shí)際的開發(fā)階段。先打開IDE中的"服務(wù)器資源管理器"展開你想建立消息隊(duì)列的計(jì)算機(jī)名,再展開"消息隊(duì)列"右擊它在彈出菜單中選擇"新建"建立一個(gè)新的消息隊(duì)列,并為它指定一個(gè)名字,這個(gè)名字可以隨意。也可以通過編程來完成,代碼如下:

  1. system.Messaging.MessageQueue
    .Create(".\Private$\MyPrivateQueue")

  2. '建立專用隊(duì)列  

  3. System.Messaging.MessageQueue.
    Create("myMachine\MyQueue")

  4. '建立公共隊(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ù)器程序檢查指定的VB.NET消息隊(duì)列當(dāng)發(fā)現(xiàn)有新消息到達(dá)時(shí),就開始執(zhí)行消息中的內(nèi)容,由于消息中的內(nèi)容是t-sql語句所以服務(wù)器端實(shí)際上是執(zhí)行對數(shù)據(jù)庫的操作。
客戶端程序:

  1. public Sub client()  

  2. Dim tM As New System.Messaging.
    MessageQueue()  

  3. tM.Path = ".\Private$\jk" '
    "FORMATNAME:PUBLIC=3d3dc813-
    c555-4fd3-8ce0-79d5b45e0d75"
    '與指定計(jì)算機(jī)中的消息隊(duì)列建立連接,  

  4. Dim newMessage As New System.
    Messaging.Message(TextBox1.Text)
    '接受文本筐的t-sql語句  

  5. newMessage.Label = "This is 
    the label"'消息名字,  

  6. tM.Send(newMessage)'發(fā)送消息  

  7. End Sub  


服務(wù)端程序:

  1. public Sub server()  

  2. Dim NewQueue As New System.Messaging
    .MessageQueue(".\Private$\jk")'
    "FORMATNAME:PUBLIC=3d3dc813-c555-
    4fd3-8ce0-79d5b45e0d75"'與指定計(jì)算機(jī)
    中的消息隊(duì)列建立連接,  

  3. Dim m As System.Messaging.Message  

  4. '查看VB.NET消息隊(duì)列中的消息  

  5. m = NewQueue.Receive   

  6. m.Formatter = New System.Messaging.
    XmlMessageFormatter(New String() 
    {"System.String,mscorlib"})  

  7. Dim st As String  

  8. st = m.Body'消息隊(duì)列中消息的消息內(nèi)容。
    既sql語句  

  9. Dim con As New OleDb.OleDbConnection
    ("輸入自己的數(shù)據(jù)庫連接字符串")  

  10. con.Open()  

  11. Dim com As New OleDb.OleDbCommand
    (st, con)'執(zhí)行消息中的sql語句  

  12. com.ExecuteNonQuery()  

  13. con.Close()  

  14. End Sub  

在本程序中你會(huì)發(fā)現(xiàn)在sub client()中我并沒連接數(shù)據(jù)庫和請求數(shù)據(jù),而是通過發(fā)消息來操作數(shù)據(jù)庫的,這個(gè)好處是節(jié)省了兩部分時(shí)間:

1、對數(shù)據(jù)庫連解請求數(shù)據(jù)的時(shí)間。

2、從數(shù)據(jù)庫返回?cái)?shù)據(jù)的時(shí)間。

在很多情況下其實(shí)我們并不需要看見具體的數(shù)據(jù)就知道該怎么修改數(shù)據(jù)庫中的數(shù)據(jù)。例如要?jiǎng)h除張三的記錄,就可以將一條簡單的刪除語句放入消息中,發(fā)給服務(wù)器讓服務(wù)器程序去處理對數(shù)據(jù)的更改。

此外VB.NET消息隊(duì)列的另一個(gè)主要用途也就是當(dāng)前ERP軟件中必不可少的,就是在斷開連接時(shí)保存信息,當(dāng)連接恢復(fù)時(shí)發(fā)送消息。消息在如下兩種情況中無法迅速地傳遞到它們的隊(duì)列:當(dāng)隊(duì)列駐留的計(jì)算機(jī)無法工作時(shí),或當(dāng)路由消息所需的域控制器無法工作時(shí)。"消息隊(duì)列"可讓您應(yīng)對這些情況,使得在從網(wǎng)絡(luò)上斷開連接或必要的計(jì)算機(jī)或控制器無法工作時(shí),仍可以繼續(xù)發(fā)送消息。在這些情形下,消息暫時(shí)存儲(chǔ)在本地計(jì)算機(jī)或傳遞路由上的某個(gè)計(jì)算機(jī)的隊(duì)列中,直到完成傳遞所需的資源重新聯(lián)機(jī)。

例如,假設(shè)有一個(gè)記錄所有在出差的銷售人員發(fā)送的訂單的中央隊(duì)列。這些銷售人員每天的大部分時(shí)間都以斷開連接的方式工作,記錄來自客戶站點(diǎn)的訂單信息,并且每天撥號(hào)連接一次,將所有這些信息傳輸?shù)街醒腙?duì)列中。因?yàn)橄⒃诎l(fā)送方斷開連接時(shí)仍可發(fā)送到隊(duì)列,所以銷售人員可以在記錄客戶信息時(shí)立即發(fā)送他們的消息,但系統(tǒng)會(huì)緩存這些消息直到晚間進(jìn)行撥號(hào)連接為止。

在斷開連接時(shí)要怎么保存消息呢?向斷開連接的隊(duì)列發(fā)送消息同向可用隊(duì)列發(fā)送消息的過程幾乎完全相同。當(dāng)要向其發(fā)送的隊(duì)列不可用時(shí),不必進(jìn)行任何特殊的配置以使組件將消息存儲(chǔ)在臨時(shí)隊(duì)列中。在client代碼的tM.Path = ".\Private$\jk"后面有一條注釋語句,其實(shí)這條語句就是實(shí)現(xiàn)向斷開連接的隊(duì)列發(fā)送消息的功能。只要將tM.Path = ".\Private$\jk"這條語句換成tM.Path = "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"其中PUBLIC后面的數(shù)字是要發(fā)送到計(jì)算機(jī)的guid數(shù)字。

這個(gè)數(shù)字可以打開那臺(tái)計(jì)算機(jī)的消息隊(duì)列的屬性看見。使用這種方法就可以在斷開連接的情況下保證對服務(wù)器的操作是有效?,F(xiàn)在運(yùn)行這個(gè)程序后,打開計(jì)算機(jī)管理,在"計(jì)算機(jī)管理"窗口中展開"服務(wù)和應(yīng)用程序"-》"消息隊(duì)列"-》"傳出隊(duì)列",你將在右邊的窗口中看見你建立的消息。(如果你使用tM.Path = ".\Private$\jk"語句,在"計(jì)算機(jī)管理"窗口中展開"服務(wù)和應(yīng)用程序"-》"消息隊(duì)列"-》"專用隊(duì)列"可以看見你建立的隊(duì)列。)

其實(shí)消息隊(duì)列的編程并不復(fù)雜,但它在網(wǎng)絡(luò)環(huán)境的程序開發(fā)中是非常有用的,可以簡化大量的開發(fā)過程和節(jié)省開發(fā)時(shí)間。而且,消息隊(duì)列的編程有很大的靈活性,幾乎可以解決網(wǎng)絡(luò)編程的大部分問題。比如聊天程序,遠(yuǎn)程控制程序。

本文針對VB.NET消息隊(duì)列做了一個(gè)簡單的介紹,并舉了一個(gè)例來說明怎么在.NET下使用消息編程,達(dá)到快速高效穩(wěn)定的對數(shù)據(jù)庫進(jìn)行操作。***補(bǔ)充要說的是在Internet中也一樣可以使用消息隊(duì)列,只需要將tM.Path = "FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75語句后面的數(shù)字變成消息隊(duì)列所在服務(wù)器的數(shù)字就可以了。但是要提醒大家的是使用消息在傳輸時(shí)將占有大量的帶寬,所以在不是必須的時(shí)候,Internet下的編程不要使用消息。

以上是“VB.NET消息隊(duì)列是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享名稱:VB.NET消息隊(duì)列是什么
網(wǎng)頁網(wǎng)址:http://muchs.cn/article40/ippeeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、定制網(wǎng)站、做網(wǎng)站、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)