我学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的代码已经返回给客户端了,不知道我这样理解是否正确

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python 字符转义(url中文转义)

    URL特殊字符需转义1、空格换成加号(+)2、正斜杠(/)分隔目录和子目录3、问号(?)分隔URL和查询4、百分号(%)制定特殊字符5、#号指定书签6、&号分隔参数转义字符的原因:如果你的表单使用get方法提交,并且提交的参数中有“&”等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数…

  • Java Manifest

    Java ManifestJavaManifest直接使用Javaclass文件来运行程序,但一般发布和运行JAR(JavaArchive)文件,JAR文件是class文件的ZIP压缩存档。Manifest描述了Jar文件的打包、运行信息。JDK提供了用于处理Manifest信息的API,详细的信息请见java.util.jar包,通过给JarFile传递jar文件的路径,然后调用JarFile的

    2022年10月31日
  • 物联网流量卡管理系统源码_物联网数据管理系统结构

    物联网流量卡管理系统源码_物联网数据管理系统结构物联网卡管理平台源码-物联网卡管理系统源码V5.0版本内置十余条的第三方管理平台,如申达、硕朗、天移、奇成等可以直接对接内置微信商户、免签支付、支付宝当面付内置安装教程,从购买服务器到安装完成,仅需5步!………………………………………………………

  • 如何用ghost备份系统_服务器raid5如何做备份恢复

    如何用ghost备份系统_服务器raid5如何做备份恢复‍电脑安装完系统后,要及时对系统进行备份,这样系统出现什么问题,就可以快速恢复。我们可以用手动Ghost工具对系统进行备份操作。下面和系统城小编一起了解手动Ghost备份系统的具体操作。1、重启电脑,快速按F8,进入DOS界面,运行Ghost.exe;2、选择Local(本机)——Partition(分区)——ToImage(镜像),备份镜像文件到指定文件夹;3、选择备份源的磁盘驱动器(电脑硬盘…

  • HTML/CSS 常见面试题汇总

    HTML/CSS 常见面试题汇总HTML面试题1、<image>标签上title属性与alt属性的区别是什么?alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说明的。且长度必须少于100个英文字符或者用户必须保证替换文字尽可能的短。这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户等。title属性为设置该属性的元素提供建议性的信息。使用ti…

  • pip更新方法

    pip更新方法pip更新方法如下:方法一:pycharm中的Terminal中更新,使用如下命令:python-mpipinstall–upgradepip方法二:删除原pip文件,重新安装例如pip文件在如下文件夹中C:\Python\Python373\Lib\site-packages我们能够知道pip20.1.1所在路径,找到它,然后删掉pip-20.1.1.dist-info文件夹。设置如下图,已不见pip的踪影。提示,packagi…

发表回复

您的电子邮箱地址不会被公开。

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