.net的MSMQ非同步呼叫 shanhe [原作]

來源:互聯網
上載者:User
 

1、引用System.messagiong.dll
2、using System.messagiong 命名空間
3、建立/建立自己需要的隊列(這裡監測專有隊列)

string queuename=".//private$//testQueue";
   MessageQueue q;
   if(MessageQueue.Exists(queuename) )
   {
    q=new System.Messaging.MessageQueue (queuename);
   }
   else
   {
    q=MessageQueue.Create(queuename);
   }
這代代碼執行後,會在訊息佇列中的專有隊列看到名為testQueue的隊列。具體為管理工具--〉電腦管理--〉服務和應用程式--〉訊息佇列--〉專用隊列
可以看到隊列中存在的訊息
4、向隊列發送訊息
兩種發送訊息的方式:
簡單訊息,直接利用q.send("....");的方式發送,複雜訊息(譬如一個特定對象,當然是可序列化的)採用
Message m=new Message();
   m.Label ="msg1";
   m.Body ="test body";
   q.Send (m);
發送。訊息會採用預設的XML格式編碼送到隊列中
5、訊息接收
  主動方式,會同步阻塞當前線程
    Message m=Receive(); //接收同時,從隊列中刪除訊息
    or
    Message m=Peek();  //不刪除接收到的訊息
  被動方式,非同步呼叫方式,不會阻塞當前線程
    q.ReceiveCompleted +=new ReceiveCompletedEventHandler( ReceivedEvt); //事件
    q.BeginReceive();
    其中ReceivedEvt要麼為靜態函數,要麼必須是屬於執行個體化的對象的可訪問函數
     private static void ReceivedEvt(object source, ReceiveCompletedEventArgs asyncResult)
  {
   try
   {
    
    MessageQueue mq = (MessageQueue)source;  
    Message m = mq.EndReceive(asyncResult.AsyncResult);
                 //此事m為非同步接收到的訊息
    //在此插入處理訊息的代碼
    Console.WriteLine("接收到訊息"+m.Label );

    mq.BeginReceive();//接收下一次事件
   }
   catch(MessageQueueException)
   {
   }                 
   return;
  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.