要想使用MSMQ必须现在添加功能中添加 '消息队列' 功能,
安装完成之后,环境就没有这方面的问题了.
在c#中可以通过拖拽控件的方式建立一个MessageQueue对象,也可以通过创建类的方式 new一个MessageQueue对象,
之后要对MessageQueue进行初始化,需要提供MessageQueue的路径,路径中包含了要创建的队列是公开的还是私有的及消息队列的名称.例如:
当路径不存在时(队列不存在):MessageQueue.Create(@".\private$\myQueue");这句表示创建一个名为myQueue的专有(私有)消息队列,
还有Journal$表示创建的是日志队列MessageQueue.Create(@".\myQueue\Journal$");这里的Journal$在队列名之后
以及什么都不加的公公队列MessageQueue.Create(@".\myQueue");
路径中的"."代表本机名称,一般用"."就行了,当然使用本机名称也是完全没有问题的.
如果队列已经存在,也可以在创建对象直接初始化, new MessageQueue(@".\private$\myQueue"),也是可以的.或者通过给Path属性赋值 例如:
MessageQueue messagequeue1= new MessageQueue();
messagequeue1.path = @".\private$\myQueue";
创建完成后可以通过win+r 输入 compmgmt.msc 打开计算机管理,在最下面的服务和应用程序子目录中有消息队列,展开专用队列就可以找到你的队列.名称上右键可以设置队列的属性,包括存储限额大小之类的属性.
之后通过send方法发送消息到队列,那个队列对象调用的send方法,就往哪个队列里写
通过receive方法读队列,同样的,谁调用的,从谁的队列里读,读队列里的第一条并删除.
读取到的数据如果有特殊格式就需要进行解析.如果没有就直接调用 .Body属性,里面保存的是消息的内容.
例如 :
System.Messaging.Message msg = messageQueue2.Receive();//receive函数,读消息队列的第一条消息到msg中,并删除 队列中的第一条消息.
msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });//这里将接收到的消息序列化成字符串.string可以替换成别的,可以是基础数据类型,也可以是你自己写的类,
string result = msg.Body //将消息内容保存到string类型的result中.这里的返回类型如果不是string的话需要进行强制类型转换,例如 myClass result = (myClass)msg.Body.前提是你的消息真的是这个类型,否则会引发异常
相对的有一个peek方法,只读队列但不删除.
清空队列用Purge方法,这个函数会清空队列里的所有消息,但消息队列本身还存在,还可以继续读写消息,
delete方法会直接删除消息队列本身,删除之后就没有这个消息队列了.之后就不能再对这个队列进行操作了.(除非再创建一次)
最后是close方法,字面意思,关闭当前消息队列.
PS:推荐一篇文章
https://blog.youkuaiyun.com/xpj8888/article/details/85006879
全是链接,太强了