初识Message Queue之--基础篇
2016-08-26 16:50
246 查看
之前我在项目中要用到消息队列相关的技术时,一直让Redis兼职消息队列功能,一个偶然的机会接触到了MSMQ消息队列。秉着技术还是专业的好为原则,对MSMQ进行了学习,以下是我个人的学习笔记。
一、什么是MSMQ
在我理解中,消息队列就是一个数据的容器,并且可以异步处理数据,提高数据的并发性。比如投递简历:用人单位就像是消息队列,在同一时间,可以接受大量的简历(数据)。然后等回公司了再一份一份的取出查看。
二、MSMQ功能启动(win 7为例)
好多系统默认是不开启消息队列(MSMQ)的。故,我们要手动开启。具体流程为:打开控制面板-》程序和功能-》打开或关闭Windows功能(时间比较长)-》勾选Microsoft Message Queue(MSMQ)服务器;即可。如图所示:
1、
2、
3、
完成以上操作,MSMQ便正常启动了;
三、创建一个消息队列(暂做了解,代码也可以创建,感觉代码更方便直观)
我们通过打开计算机管理,就可以看到消息队列的内容了。(计算机管理打开方式:控制面板-》管理工具-》计算机管理)如图:
我们可以看出,系统给我们提供了四种队列,但是我们用户只能使用专用队列这一项。队列地址以private$\开头。
我们可以尝试创建一个专用队列,"右击"专用队列,再点击"新建",得到新增界面如下图。
对话框里面有一个事务性,说明MSMQ是支持事物提交,由于目前没有涉及到事物性,因此暂不讲解。
我们起一个名为test的消息队列点击确定,我们便可以看到在右侧出现了一个名为test的队列。
四、怎么样在.NET中使用MSMQ
对于.NET来说,微软封装了操作MSMQ的类,MessageQueue ;该类需要引入命名空间System.Messaging;
以下分模块介绍MessageQueue 中的主要方法:
1、创建MSMQ队列(Create)
2、发送数据(Send)
注:在发送时,尽量使用消息队列对象指定一个Formatter类型(用Formatter属性)。在接收和发送均用相同类型。否则有可能程序在Receive时就抛异常。
3、接收数据(Receive)
注:Receive方法在没有数据接收时,会阻塞线程。因此,建议放在单独的线程中运行,以保证程序的稳定运行;
Message是MSMQ的一个数据容器,其中数据存储在Body中。Body是一个已经被序列化的数据。故,在使用时要转换为相应的类型。
以上是基础的MSMQ的使用方式,掌握上述技术,可以使用MSMQ进行简单的数据存储。之后有更高级的用法我再补充。谢谢!
一、什么是MSMQ
在我理解中,消息队列就是一个数据的容器,并且可以异步处理数据,提高数据的并发性。比如投递简历:用人单位就像是消息队列,在同一时间,可以接受大量的简历(数据)。然后等回公司了再一份一份的取出查看。
二、MSMQ功能启动(win 7为例)
好多系统默认是不开启消息队列(MSMQ)的。故,我们要手动开启。具体流程为:打开控制面板-》程序和功能-》打开或关闭Windows功能(时间比较长)-》勾选Microsoft Message Queue(MSMQ)服务器;即可。如图所示:
1、
2、
3、
完成以上操作,MSMQ便正常启动了;
三、创建一个消息队列(暂做了解,代码也可以创建,感觉代码更方便直观)
我们通过打开计算机管理,就可以看到消息队列的内容了。(计算机管理打开方式:控制面板-》管理工具-》计算机管理)如图:
我们可以看出,系统给我们提供了四种队列,但是我们用户只能使用专用队列这一项。队列地址以private$\开头。
我们可以尝试创建一个专用队列,"右击"专用队列,再点击"新建",得到新增界面如下图。
对话框里面有一个事务性,说明MSMQ是支持事物提交,由于目前没有涉及到事物性,因此暂不讲解。
我们起一个名为test的消息队列点击确定,我们便可以看到在右侧出现了一个名为test的队列。
四、怎么样在.NET中使用MSMQ
对于.NET来说,微软封装了操作MSMQ的类,MessageQueue ;该类需要引入命名空间System.Messaging;
以下分模块介绍MessageQueue 中的主要方法:
1、创建MSMQ队列(Create)
string path =".\\private$\\"+ "test";//设置消息队列路径 if (!MessageQueue.Exists(path))//判断该路径是否存在 { MessageQueue.Create(path);//如果不存在则创建 } MessageBox.Show("ok");
2、发送数据(Send)
string path = ".\\private$\\" + "test";//设置消息队列路径 MessageQueue msqs = new MessageQueue(path);//创建指定路径下的消息队列对象 Message ms = new Message();//创建消息对象 ms .Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });//设置消息的Formatter数据类型 msqs.Send(ms); MessageBox.Show("成功");
注:在发送时,尽量使用消息队列对象指定一个Formatter类型(用Formatter属性)。在接收和发送均用相同类型。否则有可能程序在Receive时就抛异常。
3、接收数据(Receive)
string path = ".\\private$\\" + "test";//设置消息队列路径 MessageQueue msqs = new MessageQueue(path);//创建指定路径下的消息队列对象 System.Messaging.Message mes = msqs.Receive();//获取单条数据(如果没有数据,当前进程会被阻塞) string message = mes.Body.ToString();//获取Message内的内容 MessageBox.Show(message);
注:Receive方法在没有数据接收时,会阻塞线程。因此,建议放在单独的线程中运行,以保证程序的稳定运行;
Message是MSMQ的一个数据容器,其中数据存储在Body中。Body是一个已经被序列化的数据。故,在使用时要转换为相应的类型。
以上是基础的MSMQ的使用方式,掌握上述技术,可以使用MSMQ进行简单的数据存储。之后有更高级的用法我再补充。谢谢!
相关文章推荐
- J2ME初识--JAVA基础
- asp.net控件开发基础(17) --------初识数据绑定控件
- Android基础之单线程模型中Message、Handler、Message Queue、Looper之间的关系
- QML基础——初识Qt Quick Designer
- 初识hibernate——基础与核心
- XML初识之基础
- Molehill 初识--flash 3d 开发基础
- QML基础——初识Qt Quick Designer
- Windows Message Queue((hdu1509))基础题
- asp.net控件开发基础(17) --------初识数据绑定控件
- QML基础——初识Qt Quick Designer
- PowerShell_零基础自学课程_1_初识PowerShell
- Linux学习笔记一 ---- Linux基础知识认知以及初识Linux下C编程入门
- linux 基础学习之三:bash shell初识 下
- asp.net控件开发基础(17) --------初识数据绑定控件
- 用《叩响C#之门》复习C#基础知识 第一章 初识编程
- linux 基础学习之三:bash shell初识 上
- JAVA 基础之初识JAVA
- java基础-java相关技术的初识
- Struts2学习笔记01----初识struts2配置文件和相关基础知识