我学MSMQ(二)

我学MSMQ(二)

  上次我主要学习的是MSMQ的基本的概念、安装消息队列和新建了一个简单的队列。
      现在我就继续学习关于消息队列的接收

先还是概念
         消息的接收又分成同步和异步方式两种,同步接收在规定时间内从消息队列中取出收到的第一条消息,当消息队列中没有消息时,程序处于等待状态;异步接收方式则是定义了一个事件处理函数,当消息队列中第一个消息到达时立即触发该函数。 
接下来我就做个实验:

我学MSMQ(二)     private  void FSend()


我学MSMQ(二)    
{

我学MSMQ(二)        string queuename = “.\\private$\\testQueue”;//队列名称
我学MSMQ(二)        MessageQueue q;
我学MSMQ(二)        if (MessageQueue.Exists(queuename))
我学MSMQ(二)        {

我学MSMQ(二)            q = new System.Messaging.MessageQueue(queuename);
我学MSMQ(二)        }

我学MSMQ(二)        else
我学MSMQ(二)        {

我学MSMQ(二)            q = MessageQueue.Create(queuename);
我学MSMQ(二)        }

我学MSMQ(二)        Message m = new Message();
我学MSMQ(二)        m.Label = “MessageLabel”;      //描述消息的字串
我学MSMQ(二)        m.Body = Send.Text;        //消息的主体
我学MSMQ(二)        q.Send(m);                      //发送
我学MSMQ(二)    }

发送消息,上次做过一个,很简单
然后我就做了同步接收的方法:

我学MSMQ(二)     private  void Recevie()


我学MSMQ(二)    
{

我学MSMQ(二)        string queuename = “.\\private$\\testQueue”;//队列名称
我学MSMQ(二)        MessageQueue q;
我学MSMQ(二)        q = new System.Messaging.MessageQueue(queuename);
我学MSMQ(二)        Message m = q.Receive();
我学MSMQ(二)        m.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
我学MSMQ(二)        Recieve.Text = m.Body.ToString();
我学MSMQ(二)    }

然后看结果
我学MSMQ(二)
然后我们在证实下“同步接收在规定时间内从消息队列中取出收到的第一条消息,当消息队列中没有消息时,程序处于等待状态” 。
我学MSMQ(二)
大家有看到进度条吗?它就一直在等待中,然后我再打开一个页面,再发送一个消息,我们就能看到,他马上就能接收
我学MSMQ(二) 
做完了同步的,然后我继续在实验异步的,看看消息队列是怎么操作的

我学MSMQ(二)     private  void RecevieAsynchronism()


我学MSMQ(二)    
{

我学MSMQ(二)        string queuename = “.\\private$\\testQueue”;                                 //队列名称
我学MSMQ(二)        MessageQueue q;
我学MSMQ(二)        q = new System.Messaging.MessageQueue(queuename);
我学MSMQ(二)        Message m=q.Peek();                                                           //不删除接收到的消息
我学MSMQ(二)                                                                                    //被动方式,异步调用方式,不会阻塞当前线程
我学MSMQ(二)    q.ReceiveCompleted +=new ReceiveCompletedEventHandler( ReceivedEvt);            //事件
我学MSMQ(二)    q.BeginReceive(); 
我学MSMQ(二)                       
我学MSMQ(二)    }



我学MSMQ(二)


我学MSMQ(二)     public   void ReceivedEvt( object source, ReceiveCompletedEventArgs asyncResult)


我学MSMQ(二)    
{

我学MSMQ(二)        //其中ReceivedEvt要么为静态函数,要么必须是属于实例化的对象的可访问函数
我学MSMQ(二)        try
我学MSMQ(二)        {

我学MSMQ(二)            MessageQueue mq = (MessageQueue)source;
我学MSMQ(二)            Message m = mq.EndReceive(asyncResult.AsyncResult);
我学MSMQ(二)            //此事m为异步接收到的消息
我学MSMQ(二)            //在此插入处理消息的代码 
我学MSMQ(二)            m.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
我学MSMQ(二)            t_Recieve.Text = m.Body.ToString();
我学MSMQ(二)            mq.BeginReceive();//接收下一次事件
我学MSMQ(二)        }

我学MSMQ(二)        catch (MessageQueueException)
我学MSMQ(二)        {

我学MSMQ(二)
我学MSMQ(二)        }

我学MSMQ(二)        return;
我学MSMQ(二)    }

首先定义了一个事件,当第一个消息到达的时候,就触发事件,读取消息.首先我们先来看结果
我学MSMQ(二)
我们按发送消息,然后在按接受消息,发现他竟然是等待,为什么呢?
下面是我个人的理解,不是对否,希望有人指出
首先在按发送消息的时候,其实就有了第一个消息,然后就触发了事件,已经把消息读了出来,所以在按接受按钮的时候,就没有了消息,就只能等待,可是还有个问题,既然实现了事件,那事件里面不是有对文本框进行赋值的吗?其实他只要是异步的原因,因为这个事件在后台运行的,真正的asp.net的代码已经返回给客户端了,不知道我这样理解是否正确

今天只要是学习了同步和异步的接收消息,但是还有很多的问题还没搞清楚,比如 消息的并发性,怎么结合数据库使用,怎么样发送复杂的消息等等,这些问题还有待解决

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109905.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux的文件系统类型「建议收藏」

    Linux的文件系统类型「建议收藏」提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、文件系统类型 二、Linux基本文件操作 1.基本目录和文本命令 三、Linux查找 总结前言本节学习Linux下的l文件系统类型提示:以下是本篇文章正文内容,下面案例可供参考一、文件系统类型不同文件系统采用不同的方法来管理磁盘空间,各有优劣;文件系统是具体到分区的,所以格式化针对的是分区,分区格式化是指采用指定的文件系统类型对分区空间进行登记、索引并建立相应的管理表格的过程。

    2022年9月17日
  • mysql decimal长度_mysql decimal类型与decimal长度用法详解[通俗易懂]

    mysql decimal长度_mysql decimal类型与decimal长度用法详解[通俗易懂]以下内容转自:http://blog.csdn.net/zhanghao143lina/article/details/53816884三者的区别介绍float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)decimal:数字型,128bit,不存在精…

    2022年7月17日
  • idea激活码永久 吾爱破解_通用破解码

    idea激活码永久 吾爱破解_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
  • 测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人…「建议收藏」

    测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人…「建议收藏」3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人2020-03-2700:10:00135点赞716收藏90评论创作立场声明:Tony哥的矿卡日记二手矿卡坑太深,手握秘籍不求人AMD自2016年中发布Polaris系列GPU至今,长达四年的时间里,一代又一代的RX470、480、570、580等显示卡进入暗无天日的区块链矿场,挥洒着血泪和青春。在经历一次次矿难之后,貌似廉价的二手矿卡…

    2022年6月5日
  • 华为云:申请免费证书、部署HTTPS证书操作流程[通俗易懂]

    华为云:申请免费证书、部署HTTPS证书操作流程[通俗易懂]一、前提:(1)已经有华为云账号;(2)已经申请域名;(3)已经购买华为云弹性服务器;二、目的:(1)部署SSL证书之后能通过https地址访问服务;三、流程:1.申请免费证书:(注:官方证书操作链接:https://support.huaweicloud.com/usermanual-scm/scm_01_0132.html)(1)在搜索栏搜索“免…

    2022年9月27日
  • paoding分词TokenStream的使用

    paoding分词TokenStream的使用[code="java"]importjava.io.IOException;importjava.io.StringReader;importnet.paoding.analysis.analyzer.PaodingAnalyzer;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lu…

    2022年7月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号