前兩篇介紹 MSMQ 基礎與優先級,本文以開源專案 PetShop 中的 MSMQ 應用為例,說明實際專案如何整合多執行緒監控佇列。
需求:指定佇列無論有無訊息,啟動多執行緒持續監控,一旦有訊息立即讀取處理。
static private int ThreadNumber = 5; static private Thread[] ThreadArray = new Thread[ThreadNumber];
private void button1_Click(object sender, EventArgs e) { StartThreads(); }
private void StartThreads() {
for (int counter = 0; counter < ThreadNumber; counter++) {
ThreadArray[counter] = new Thread(new ThreadStart(MSMQListen));
ThreadArray[counter].Start();
this.richTextBox2.Text += (counter + 1).ToString() + "號執行緒開始!";
}
}
private void MSMQListen() {
while (true) {
// 取出佇列訊息 (阻塞直到有訊息)
MessageBox.Show(MsgQueue.ReceiveMessage());
}
}
PetShop 使用專用應用程式 (Windows Service) 承載多執行緒監聽器,將訊息處理邏輯與 Web 前端分離,達到高可用與擴展性。實務上建議:
MessageQueue.BeginReceive 非同步模式,避免阻塞執行緒。TransactionScope 確保訊息處理的原子性。Poison Message 機制處理重複失敗的訊息。多執行緒監控 MSMQ 是高併發系統常見模式,搭配非同步與交易機制可構建健壯的訊息處理管線。