在本文的前兩篇文章裡對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}56private 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}1617private void MSMQListen()18{19 while (true)20 {21 //取出隊列裡的訊息22 MessageBox.Show(MsgQueue.ReceiveMessage());23 }24}