MSMQ(消息隊列)


前段時間研究WCF接觸到了MSMQ,所以認真的學習了一下,下面是我的筆記。

我理解的MSMQ

      MSMQ可以被看成一個數據儲存裝置,就如同數據庫,只不過數據存儲的是一條一條的記錄,而MSMQ存儲的是一個一個的消息(messsge)。Message可以被理解為一種數據容器,我們在稍后會講到。MSMQ一個重要的應用場景就是離線信息交互,例如,我們在給朋友發送郵件,而此時朋友並未登入郵箱,這個時候我們的郵件就可以發到郵件服務器的MSMQ隊列中,當朋友登入郵箱的時候,系統在從服務器的MSMQ隊列中取出U件。當然MSMQ的用途遠不止這些,例如,充當數據緩存,實現異步操作等等,這里就不在一一舉例了。

MSMQ的安裝

    我們在使用MSMQ的時候需要安裝MSMQ,具體步驟請點擊 這里。當我們正確的安裝了MSMQ我們可以在"計算機管理(本地)"找到安裝的MSMQ服務,如下圖

    

在圖上我們可以看見系統的消息隊列,為我們提供了3種隊列傳出隊列,專用隊列和系統隊列,而用戶能自由創建的只有專用隊列。我們可以嘗試創建一個專用隊列,"右擊"專用隊列,再點擊"新建",得到新增界面如下圖。由於我們創建的是專用隊列,所以在隊列命名上面顯示的添加"private$",另一個事務復選框表示我們要創建的是隊列是否為事務隊列,這個在稍后我會詳細的解釋

 

我在專用隊列里面添加一個叫"shaoshun"的專用隊列,在專用隊列文件夾下面就可以找到,如圖

消息

      消息是MSMQ的存儲對象,封裝為System.Messaging.Message對象,它由一個主體(body)和若干屬性構成,其中我們的用戶數據通常被序列化裝入body主體中,這也是我們稱它為數據容器的原因。除了body屬性,還有幾個屬性相對來說比較重要:Priority(消息的優先級),Label(用戶定義的消息標識),Formatter(消息的序列組件,當用戶將復雜類型數據填充到body中,用戶的數據會先被序列化)

隊列

  在前面,我們通過手動創建了一個專用隊列。我們知道隊列分事務性隊列和非事務性隊列,默認創建的是非事務性隊列。當我們勾選事務性復選框,我們就會創建事務性隊列,那么什么是事務性隊列呢?事務性隊列將消息保存在磁盤上,實現了持久化,也就是說當我們關機,斷電后,下次再啟動機器,我們的消息依然保存在隊列里面,而非事務性隊列則將消息保存在內存中,也就是說我重啟電腦后,隊列里面的消息將不存在了。

     隊列支持事務操作,當我們把對多個消息的接收操作納入一個事務中,那么只要有一個消息接收不成功,隊列將拋棄前面接收的所有消息,實現事務回滾。隊列事務同時支持消息按順序接收與發送。

尾聲

    本文我對MSMQ的相關概念進行了說明,在下一篇,我將通過代碼來介紹MSMQ在.net中的常規操作

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM