在本文的前兩篇文章裡對MSMQ的相關知識點進行了介紹,很多閱讀過這前兩篇文章的朋友都曾問到過這樣一些問題:
1、如何把MSMQ應用到實際的項目中去呢?
2、可不可以介紹一個實際的應用實例?
3、......
在前兩篇文章裡,關於MSMQ常用的技術點基本介紹完畢了,本文主要以MS開源項目PetShop中的MSMQ應用作為案例來介紹MSMQ在實際項目中的應用。在PetShop裡,由於系統使用了多線程的專用應用程序來監控消息隊列,在進入PetShop應用分析前,我們先來了解下關於多線程和MSMQ的相關知識點。
一、多線程和MSMQ
現在有這樣一個需求,指定的消息隊列裡不管有無消息數據,我們通過一個多線程來監控這個隊列,一但隊列裡的數據發生變化就做出相應的處理,比如把消息讀取出來。根據這個需求,我們來做個示例,用一多線程把隊列監控起來,如果隊列裡有消息數據,就把消息讀取出來,如果沒有則一直監視隊列,當隊列數據發生改變(有新的消息加入)的時候就作出處理(讀取消息)。
首先定義一個線程數組用於存儲線程數;
1static private int ThreadNumber = 5; //5個線程序 2static private Thread[] ThreadArray = new Thread[ThreadNumber];
我們把需要啟動的線程裝載入ThreadArray數組,通過一個遍歷數組把所以的線程啟動,實際這裡只有5個線程。
1private void button1_Click(object sender, EventArgs e) 2{ 3 StartThreads(); 4} 5 6private void StartThreads() 7{ 8 int counter; //線程計數 9 for (counter = 0; counter < ThreadNumber; counter++) 10 { 11 ThreadArray[counter] = new Thread(new ThreadStart(MSMQListen)); 12 ThreadArray[counter].Start(); 13 this.richTextBox2.Text += (counter + 1).ToString() + "號線程開始!"; 14 } 15} 16 17private void MSMQListen() 18{ 19 while (true) 20 { 21 //取出隊列裡的消息 22 MessageBox.Show(MsgQueue.ReceiveMessage()); 23 } 24}