我学MSMQ(一)
一、通過這篇文章主要是對自己學習MSMQ進行小結,并希望能把自己的想法寫出來,能和一些也正在研究MSMQ的朋友共同學習,并希望能給予指導和建議
?????????二、首先是MSMQ的一些理論上的知識?????????MSMQ(MicroSoft Message Queue,微軟消息隊列)是在多個不同的應用之間實現相互通信的一種異步傳輸模式,相互通信的應用可以分布于同一臺機器上,也可以分布于相連的網絡空間中的任一位置。
?????????它的實現原理是:消息的發送者把自己想要發送的信息放入一個容器中(我們稱之為Message),然后把它保存至一個系統公用空間的消息隊列(Message Queue)中;本地或者是異地的消息接收程序再從該隊列中取出發給它的消息進行處理。
?????????在消息傳遞機制中,有兩個比較重要的概念。一個是消息,一個是隊列。消息是由通信的雙方所需要傳遞的信息,它可以是各式各樣的媒體,如文本、聲音、圖象等等。消息最終的理解方式,為消息傳遞的雙方事先商定,這樣做的好處是,一是相當于對數據進行了簡單的加密,二則采用自己定義的格式可以節省通信的傳遞量。隊列是發送和接收消息的公用存儲空間,它可以存在于內存中或者是物理文件中。
?????????采用MSMQ帶來的好處是:由于是異步通信,無論是發送方還是接收方都不用等待對方返回成功消息,就可以執行余下的代碼,因而大大地提高了事物處理的能力;當信息傳送過程中,信息發送機制具有一定功能的故障恢復能力;MSMQ的消息傳遞機制使得消息通信的雙方具有不同的物理平臺成為可能。在微軟的.net平臺上利用其提供的MSMQ功能,可以輕松創建或者刪除消息隊列、發送或者接收消息、甚至于對消息隊列進行管理。?三、MSMQ的安裝
MSMQ是一個Window組件,可以在Window組件向導中,應用程序服務器中添加它(如圖一)
?????????“公共隊列”在整個“消息隊列”網絡中復制,并且有可能由網絡連接的所有站點訪問。?
?????????“專用隊列”不在整個網絡中發布。相反,它們僅在所駐留的本地計算機上可用。專用隊列只能由知道隊列的完整路徑名或標簽的應用程序訪問。?
?????????“管理隊列”包含確認在給定“消息隊列”網絡中發送的消息回執的消息。指定希望 MessageQueue 組件使用的管理隊列(如果有的話)。???????
?????????“響應隊列”包含目標應用程序接收到消息時返回給發送應用程序的響應消息。指定希望 MessageQueue 組件使用的響應隊列(如果有的話)。?
??????????系統生成的隊列一般分為以下幾類: “日記隊列”可選地存儲發送消息的副本和從隊列中移除的消息副本。每個“消息隊列”客戶端上的單個日記隊列存儲從該計算機發送的消息副本。在服務器上為每個隊列創建了一個單獨的日記隊列。此日記跟蹤從該隊列中移除的消息。 “死信隊列”存儲無法傳遞或已過期的消息的副本。如果過期或無法傳遞的消息是事務性消息,則被存儲在一種特殊的死信隊列中,稱為“事務性死信隊列”。死信存儲在過期消息所在的計算機上。有關超時期限和過期消息的更多信息,請參見默認消息屬性。 “報告隊列”包含指示消息到達目標所經過的路由的消息,還可以包含測試消息。每臺計算機上只能有一個報告隊列。 “專用系統隊列”是一系列存儲系統執行消息處理操作所需的管理和通知消息的專用隊列。 在應用程序中進行的大多數工作都涉及訪問公共隊列及其消息。但是,根據應用程序的日記記錄、確認和其他特殊處理需要,在日常操作中很可能要使用幾種不同的系統隊列。
??????五、使用程序建立簡單的消息隊列 using?System.Messsagin????????????string?queuename?=?".\\private$\\testQueue";//隊列名稱????????MessageQueue?q;????????if?(MessageQueue.Exists(queuename))????????{????????????q?=?new?System.Messaging.MessageQueue(queuename);????????}????????else????????{????????????q?=?MessageQueue.Create(queuename);????????}????????Message?m?=?new?Message();????????m.Label?=?"MessageLabel";??????//描述消息的字串????????m.Body?=?"MessageBody";????????//消息的主體????????q.Send(m);??????????????????????//發送
我們執行這段代碼,就可以在計算機管理->服務和應用程序->消息隊列中多了一個“queuename”隊列,這個就是我們用程序新建的消息(如圖二)
我的第一個消息隊列就這樣誕生了,心情也比較愉快,基本也沒碰到任何的問題。其次,我們現在只是非常簡單的發送了一個消息,當然還可以發送復雜的消息,比如對象等,關鍵還有消息的接收,接受可分主動方式和被動方式這些問題,還有待學習,我會把我的學到的心得,和大家一起分享,也希望大家能給予一定的指導總結
- 上一篇: SQL Server 表变量和临时表的区
- 下一篇: 攀枝花二三孩补贴 合理的人口结构是经济发