初识Message Queue之--基础篇
之前我在项目中要用到消息队列相关的技术时,一直让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)
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进行简单的数据存储。之后有更高级的用法我再补充。谢谢!
初识Message Queue之--基础篇的更多相关文章
- python学习笔记六 初识面向对象上(基础篇)
python面向对象 面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...
- python面试题库——1Python基础篇
第一部分 Python基础篇(80题) 为什么学习Python? 语言本身简洁,优美,功能超级强大,跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做 Python和Ja ...
- C#多线程之基础篇3
在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...
- 2000条你应知的WPF小姿势 基础篇<15-21>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...
- [译]RxJS 5.X基础篇
欢迎指错与讨论 : ) 当前RxJS版本:5.0.0-beta.10.更详细的内容尽在RxJS官网http://reactivex.io/rxjs/manual/overview.html.文章比较长 ...
- python-RabbitMQ基础篇
一.RabbitMQ简单介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, ...
- ES6 你可能不知道的事 – 基础篇
序 ES6,或许应该叫 ES2015(2015 年 6 月正式发布),对于大多数前端同学都不陌生. 首先这篇文章不是工具书,不会去过多谈概念,而是想聊聊关于每个特性 你可能不知道的事,希望能为各位同学 ...
- Jenkins: 基础篇(环境配置)
自动化领域比较有影响力的开源框架jenkins,确实比较强大,易用.很多公司将其用来做持续即成CI(continuous integration).为了拓展和强化自己的软件设计生态系统,也将很久前使用 ...
- 为什么要用Message Queue
摘录自博客:http://dataunion.org/9307.html?utm_source=tuicool&utm_medium=referral 为什么要用Message Queue 解 ...
随机推荐
- 2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- Leetcode 笔记 36 - Sudoku Solver
题目链接:Sudoku Solver | LeetCode OJ Write a program to solve a Sudoku puzzle by filling the empty cells ...
- CSharpGL(20)用unProject和Project实现鼠标拖拽图元
CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...
- 挑子学习笔记:对数似然距离(Log-Likelihood Distance)
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/log-likelihood_distance.html 本文是“挑子”在学习对数似然距离过程中的笔记摘录,文 ...
- Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全 (转)
目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 GCD .其中 GCD 是基于 C 的底层的 API ,而 NSOperation 则是 GCD 实 ...
- console.log("A"-"B"+"3")=?
(点击上方的订阅号,可快速关注,关注有惊喜哦^_^) 前不久看到一道JS基础题目,做了一下竟然错了一半...在此分享一下: 先把题目放上来,大家可以自己测试一下再看答案哦^_^ ①console.lo ...
- 安装MYSQL详细教程 版本:mysql-installer-community-5.7.16.0 免安装版本和安装版本出现错误的解决
一.版本的选择 之前安装的Mysql,现在才来总结,好像有点晚,后台换系统了,现在从新装上Mysql,感觉好多坑,我是来踩坑,大家看到坑就别跳了,这样可以省点安装时间,这个折腾了两天,安装了好多个版本 ...
- 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述
上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑 ...
- Autofac 的属性注入,IOC的坑
Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不 ...
- ASP.NET MVC 利用IRouteHandler, IHttpHandler实现图片防盗链
你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你的服务器带宽.下面这种方法可以告诉你如何在ASP.NET MVC中实现一个自定义Ro ...