日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我学MSMQ(二)

發布時間:2024/9/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我学MSMQ(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 上次我主要學習的是MSMQ的基本的概念、安裝消息隊列和新建了一個簡單的隊列。
??????現在我就繼續學習關于消息隊列的接收
先還是概念?????????消息的接收又分成同步和異步方式兩種,同步接收在規定時間內從消息隊列中取出收到的第一條消息,當消息隊列中沒有消息時,程序處于等待狀態;異步接收方式則是定義了一個事件處理函數,當消息隊列中第一個消息到達時立即觸發該函數。?接下來我就做個實驗:

????private?void?FSend()????{????????string?queuename?=?".\\private$\\testQueue";//隊列名稱????????MessageQueue?q;????????if?(MessageQueue.Exists(queuename))????????{????????????q?=?new?System.Messaging.MessageQueue(queuename);????????}????????else????????{????????????q?=?MessageQueue.Create(queuename);????????}????????Message?m?=?new?Message();????????m.Label?=?"MessageLabel";??????//描述消息的字串????????m.Body?=?Send.Text;????????//消息的主體????????q.Send(m);??????????????????????//發送????}

發送消息,上次做過一個,很簡單然后我就做了同步接收的方法:

????private?void?Recevie()????{????????string?queuename?=?".\\private$\\testQueue";//隊列名稱????????MessageQueue?q;????????q?=?new?System.Messaging.MessageQueue(queuename);????????Message?m?=?q.Receive();????????m.Formatter?=?new?XmlMessageFormatter(new?Type[]?{?typeof(string)?});????????Recieve.Text?=?m.Body.ToString();????}

然后看結果

然后我們在證實下“同步接收在規定時間內從消息隊列中取出收到的第一條消息,當消息隊列中沒有消息時,程序處于等待狀態” 。大家有看到進度條嗎?它就一直在等待中,然后我再打開一個頁面,再發送一個消息,我們就能看到,他馬上就能接收做完了同步的,然后我繼續在實驗異步的,看看消息隊列是怎么操作的 ????private?void?RecevieAsynchronism()????{????????string?queuename?=?".\\private$\\testQueue";?????????????????????????????????//隊列名稱????????MessageQueue?q;????????q?=?new?System.Messaging.MessageQueue(queuename);????????Message?m=q.Peek();???????????????????????????????????????????????????????????//不刪除接收到的消息????????????????????????????????????????????????????????????????????????????????????//被動方式,異步調用方式,不會阻塞當前線程????q.ReceiveCompleted?+=new?ReceiveCompletedEventHandler(?ReceivedEvt);????????????//事件????q.BeginReceive();????????????????????????????}????public??void?ReceivedEvt(object?source,?ReceiveCompletedEventArgs?asyncResult)????{????????//其中ReceivedEvt要么為靜態函數,要么必須是屬于實例化的對象的可訪問函數????????try????????{????????????MessageQueue?mq?=?(MessageQueue)source;????????????Message?m?=?mq.EndReceive(asyncResult.AsyncResult);????????????//此事m為異步接收到的消息????????????//在此插入處理消息的代碼?????????????m.Formatter?=?new?XmlMessageFormatter(new?Type[]?{?typeof(string)?});????????????t_Recieve.Text?=?m.Body.ToString();????????????mq.BeginReceive();//接收下一次事件????????}????????catch?(MessageQueueException)????????{????????}????????return;????}

首先定義了一個事件,當第一個消息到達的時候,就觸發事件,讀取消息.首先我們先來看結果

我們按發送消息,然后在按接受消息,發現他竟然是等待,為什么呢?下面是我個人的理解,不是對否,希望有人指出首先在按發送消息的時候,其實就有了第一個消息,然后就觸發了事件,已經把消息讀了出來,所以在按接受按鈕的時候,就沒有了消息,就只能等待,可是還有個問題,既然實現了事件,那事件里面不是有對文本框進行賦值的嗎?其實他只要是異步的原因,因為這個事件在后臺運行的,真正的asp.net的代碼已經返回給客戶端了,不知道我這樣理解是否正確今天只要是學習了同步和異步的接收消息,但是還有很多的問題還沒搞清楚,比如 消息的并發性,怎么結合數據庫使用,怎么樣發送復雜的消息等等,這些問題還有待解決

總結

以上是生活随笔為你收集整理的我学MSMQ(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。