自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

VB.NET消息隊列相關內容詳細介紹

開發(fā) 后端
VB.NET消息隊列可以被分為用戶創(chuàng)建隊列和系統(tǒng)隊列。其中用戶隊列又包含有公共隊列;專用隊列等。而系統(tǒng)隊列包含的有日記隊列,死信隊列等。

VB.NET編程語言中有很多內容值得我們去深入的研究。初學者們在學習這門語言的時候,需要在實踐中去慢慢積累經驗,體驗其應用方式。我們先簡單的了解一下什么是消息隊列(MSMQ)?#t#

消息隊列是 Windows 2000(NT也有MSMQ,WIN95/98/ME/XP不含消息隊列服務但是支持客戶端的運行)操作系統(tǒng)中通訊的基礎,也是用于創(chuàng)建分布式、松散連接通訊應用程序的工具。這些應用程序可以通過不同種類的網絡進行通訊,也可以與脫機的計算機通訊。VB.NET消息隊列分為用戶創(chuàng)建隊列和系統(tǒng)隊列,用戶隊列分為:

· "公共隊列"在整個可傳遞消息的VB.NET消息隊列網絡中復制并傳輸,并且有可能由網絡連接的所有站點訪問。

· "專用隊列"不在整個網絡中發(fā)布。相反,它們僅在所駐留的本地計算機上可用。專用隊列只能由知道隊列的完整路徑名或標簽的應用程序訪問。

· "管理隊列"包含確認在給定"消息隊列"網絡中發(fā)送的消息回執(zhí)的消息。指定希望 MessageQueue 組件使用的管理隊列

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

系統(tǒng)隊列分為:

· "日記隊列"可選地存儲發(fā)送消息的副本和從隊列中移除的消息副本。

· "死信隊列"存儲無法傳遞或已過期的消息的副本。

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

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

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

其實我認為使用哪種方法并不重要,重要的是搞清楚專用隊列和公共隊列的差別(其他隊列不是必須的)。在本例中是通過"服務器資源管理器"分別在服務器上建立了專用隊列和公共隊列。
程序功能:本程序分為兩部分包括服務器程序(安裝在SQL Server服務器上)和客戶端程序,客戶端的作用是用來編寫t-sql語句并將t-sql語句放在消息中,并將消息發(fā)送到SQL Server服務器上的消息隊列中去。服務器程序檢查指定的VB.NET消息隊列當發(fā)現有新消息到達時,就開始執(zhí)行消息中的內容,由于消息中的內容是t-sql語句所以服務器端實際上是執(zhí)行對數據庫的操作。
客戶端程序:

  1. public Sub client()  
  2. Dim tM As New System.Messaging.
    MessageQueue()  
  3. tM.Path = ".\Private$\jk" '
    "
    FORMATNAME:PUBLIC=3d3dc813-
    c555-4fd3-8ce0-79d5b45e0d75"
    '與指定計算機中的消息隊列建立連接,  
  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  


服務端程序:

  1. public Sub server()  
  2. Dim NewQueue As New System.Messaging
    .MessageQueue(".\Private$\jk")'
    "
    FORMATNAME:PUBLIC=3d3dc813-c555-
    4fd3-8ce0-79d5b45e0d75"'與指定計算機
    中的消息隊列建立連接,  
  3. Dim m As System.Messaging.Message  
  4. '查看VB.NET消息隊列中的消息  
  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'消息隊列中消息的消息內容。
    既sql語句  
  9. Dim con As New OleDb.OleDbConnection
    ("輸入自己的數據庫連接字符串")  
  10. con.Open()  
  11. Dim com As New OleDb.OleDbCommand
    (st, con)'執(zhí)行消息中的sql語句  
  12. com.ExecuteNonQuery()  
  13. con.Close()  
  14. End Sub  

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

1、對數據庫連解請求數據的時間。

2、從數據庫返回數據的時間。

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

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

例如,假設有一個記錄所有在出差的銷售人員發(fā)送的訂單的中央隊列。這些銷售人員每天的大部分時間都以斷開連接的方式工作,記錄來自客戶站點的訂單信息,并且每天撥號連接一次,將所有這些信息傳輸到中央隊列中。因為消息在發(fā)送方斷開連接時仍可發(fā)送到隊列,所以銷售人員可以在記錄客戶信息時立即發(fā)送他們的消息,但系統(tǒng)會緩存這些消息直到晚間進行撥號連接為止。

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

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

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

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

責任編輯:曹凱 來源: IT168
相關推薦

2010-01-22 18:24:28

VB.NET重構

2010-01-07 14:26:37

VB.NET變量

2010-01-07 11:38:25

VB.NET鍵盤事件

2010-03-25 11:30:25

2010-01-08 15:03:12

VB.NET類屬性

2009-10-28 09:55:29

VB.NET MyCl

2010-02-01 09:18:49

C++函數指針

2009-10-12 15:02:51

VB.NET動態(tài)控件

2010-01-21 16:45:00

VB.NET繼承規(guī)則

2010-01-07 15:18:10

VB.NET常量

2010-04-02 16:53:34

Oracle內存結構

2009-11-10 12:42:47

VB.NET Prin

2010-01-27 16:56:42

Android內核

2010-04-08 10:02:15

Oracle體系結構

2010-01-08 13:35:35

VB.NET寫Log方

2010-03-02 18:01:07

WCF自定義消息篩選器

2010-01-28 16:19:39

Android She

2009-11-26 14:33:58

Cisco路由器IOS

2010-03-26 18:31:50

Python前景Python庫

2010-01-08 09:43:21

VB.NET漢字轉換
點贊
收藏

51CTO技術棧公眾號