MSMQ的一些特性

來源:互聯網
上載者:User
2006/10/19
今天上網找MSMQ的資料,發現中文資料非常少,根據英文資料,寫一點它的特性。
MSMQ是微軟的一項系統組件,功能類似於隊列中介軟體。
MSMQ支援簡單類型的資料(如int)和複雜類型的資料(如結構體)。
MSMQ支援三種訊息發送模式:
  • Express,快遞模式,在把訊息發送到MSMQ伺服器之前,不把訊息儲存在檔案中。速度最快。
  • Recoverable ,可復原模式。在把訊息發送到MSMQ伺服器之前,把訊息儲存在檔案中。所以發生異常關機等情況時,訊息仍會被發送到MSMQ伺服器。速度其次快。
  • Transactional ,與第二種比較類似,但有更多的功能:保證一條條訊息發送的順序,保證每條訊息只發送一次等。速度最慢。

上述發送模式中,前兩種會出現一條訊息多次發送的情況,程式員或MSMQ的使用者需要自己解決重複訊息的問題。
MSMQ 支援向多個隊列發送訊息,可以設定隊列的屬性(這方面和IBM MQ比較類似,等找到文檔再詳細寫),設定訊息的優先順序等。
MSMQ的不好處:缺少管理工具,只能通過MMC(電腦管理/控制台)對其進行管理,但MMC提供的功能非常少,像刪除隊列中的訊息、把訊息從一個隊列複製到另一個隊列等功能都是沒有的(可以自己變程式實現,或使用第三方的軟體如MqExplorer)。
MSMQ伺服器是否支援永久隊列(訊息發送到隊列後,重啟MSMQ或重啟電腦,資料不丟失)還不確定,沒有看到相關的文檔。

Tip1: 比較有用的幾個MSMQ Queue Properties(屬性)
PROPID_Q_BASEPRIORITY,定義queue的優先順序。
PROPID_Q_LABEL,表示隊列的描述資訊。
PROPID_Q_TYPE,定義隊列提供的服務。
(根據微軟官方文檔MSMQ Queue Properties翻譯/整理而成)

Tip2: 比較有用的幾個MSMQ msg Properties(屬性)
PROPID_M_TIME_TO_BE_RECEIVED,定義msg的“存活”時間,以秒為單位,預設值為INFINITE(無限)。
PROPID_M_PRIORITY,定義msg的優先順序。
PROPID_M_LABEL,表示msg地描述資訊。
PROPID_M_JOURNAL,定義msg逾時之後是否移到dead-letter(死信)隊列中,也有其他用處。
PROPID_M_DEST_QUEUE,定義msg發送到哪個隊列。
PROPID_M_DELIVERY,定義msg的發送方式,有EXPRESS(預設)/RECOVERABLE兩種模式。註:事務型的發送通過其他函數實現。
PROPID_M_CLASS,msg的類型
PROPID_M_BODY_TYPE, msg body type(msg中包含的資料的類型)。
PROPID_M_BODY,msg body(msg中包含的資料)。
(根據微軟官方文檔MSMQ msg Properties翻譯/整理而成)

Tip3: Message(msg) queueing -> msg -> msg body type
發送和接收訊息的時候,要注意所使用的函數和msg body type。
如果用MSMQMessage.Send()發送訊息,以及用MSMQQueue的peak()或receive()函數接收訊息,msg Queueing會自動判斷msg body type。這種做法的優點是編程方便,缺點是速度和效能方面會有一點損失。
如果使用MQSendMessage()發送訊息,需要程式員在調用該函數之前設定msg body type,不然會被自動化佈建為VT_EMPTY。如果使用MQReceiveMessage()或MQReceiveMessageByLookupId ()接收訊息,則需要程式員判斷訊息的msg body type,避免出錯。這種做法的優點是速度方面會稍微快一點,但編程稍微麻煩些。
(以上根據微軟官方文檔 msg body type翻譯/整理而成)
根據微軟官方的效能測試文檔(System.Messaging Performance,System.Messaging 效能, MSMQ-MQSeries Bridge Performance Results),兩年前主流配置的電腦,對於int, string(不超過10,000字元),並且收/發小於3000條/s的應用,第一種做法就可以了。

Tip4: msg的大小
(根據msmqFaqpub.doc),MSMQ中的採用記憶體映射的方式,把msg儲存在檔案中,檔案的固定大小是4M,所以msg的上限是4M。

Tip5: 在程式中判斷有沒有安裝MSMQ的方法
(根據msmqFaqpub.doc)用LoadLibrary()載入Mqrt.dll,如果載入失敗,說明沒有安裝MSMQ。

Tip6: 清空隊列
(根據msmqFaqpub.doc)預設地,MSMQ清除隊列中msg的方法是將其標記為“無用”,真正的清除(物理上刪除)是6小時一次。如果想改變這個頻率,就要改註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ MSMQ\Parameters項下面的MessageCleanupInterval。

參考網址
微軟官方文檔 MSMQ3.0 Feature List(特性列表)
微軟官方文檔 訊息佇列
微軟官方文檔 MSMQ Refernece
微軟官方文檔 MSMQ屬性
MSDN 中文版 Message Queueing

訊息佇列簡介及其使用(介紹比較詳細,同時講了C#中如何編程)
Message Queue(訊息佇列)介紹與應用(介紹非常詳細,沒有講如何編程)
在VB.NET中使用MSMQ(對訊息佇列和MSMQ作了簡要介紹)
使用C#和MSMQ開發訊息處理常式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.