【IT168 技术文档】MSMQ是Windows 2000、Windows XP、Windows Server 2003的一个组件,并将继续包含在Windows Vista和以后的Windows服务器中。即使目标接收应用程序没有运行,或运行发送或接收应用程序的计算机没有联网,协同合作的应用程序仍能利用MSMQ在彼此之间发送和接收消息。在到达目标队列之前,消息由MSMQ存储并转发。接收应用程序能够从队列中恢复数据。

  MSMQ之类消息队列的主要特点在于它分离发送和接收应用程序,使其不必同时运行。这意味着一个应用程序能够把数据存放在队列中,而不用理会队列中的项目是否被传送到接收应用程序。

  MSMQ是Windows的一个可选组件,只需通过Windows控制面板的添加或删除Windows组件向导就可进行安装。MSMQ有两种配置模式:域模式或工作组模式(只使用私有队列)。MSMQ安装完成后,立即就可以在.NET应用程序中运行。

  为何使用消息队列

  您可能认为您能够通过一个简单的数据库表(一个应用程序往其中写入数据,另一个应用程序从中读取数据)来应用消息队列。消息队列平台更为稳定,因为它们通常拥有自己的安全机制、事务支持及其它功能。传输消息的路由功能是它的一个关键应用。MSMQ提供各种消息队列平台。

  MSMQ交互

  开发基于消息的应用程序从队列开始。MSMQ包含四种队列类型:

  外发队列:消息发送到目的地之前,用它来临时存储消息。

  公共队列:在主动目录中公布。整个网络各种服务器上的应用程序能够通过主动目录找到并应用公共队列。

  私有队列:这些是本地服务器上的队列,对其它服务器无效(因此这些队列不在主动目录中公布。)

  系统队列:包含日记队列(由系统生成)、死队列和事务型死信队列。死消息无法传送。

  System.Messaging命名空间执行MSMQ的编程操作。这个命名空间有两个主要的对象:

  Message:队列发送或读取的实际消息或数据。

  MessageQueue:接收/发送消息的MSMQ消息队列。

  MSMQ编程 (所有的代码均在Demo里)

  建立一个队列是应用MSMQ的第一步。您可以通过Windows计算机管理控制台中的消息队列选项完成这一操作,或者自己编程建立一个队列。列表A中的C#代码建立了一个新的私有MSMQ消息队列(如果不存在队列),并同时创建一条消息。

  代码应用MessageQueue类的Exists方法来确定是否存在一个名为TechRepublic的私有队列。如存在,它用现有队列示例这个MessageQueue对象;否则,就建立一个新队列。

  新的Message对象用来向队列发送一条消息。它的Label属性指定在MSMQ控制台中显示的消息标题,其主体包含存放在队列上的项目内容。在这种情况下,我只发送文本,但您能够使用任何类型的对象。MessageQueue类的Send方法向队列发送消息。列表B中是对应的VB.NET代码。

  下一步即从队列中读取消息。这是一个简单的过程,应用MessageQueue类的Receive方法即可。如果队列中存在消息,Receive方法就返回一个消息对象;否则,它等待一条消息出现(您可以设置一个时间期限)。从队列中恢复对象需要预先知道它的类型。

  MessageQueue类的Formatter属性允许您轻松指定被恢复对象的类型。下面的简单例子仅使用文本,所以它应用System.String。在列表C中,C#代码从测试队列中读取消息。

  提交给Receive方法的TimeSpan对象指定异常出现时系统的等待时间。接下来设置这个例子中的Formatter方法,对象被转换成字符串读取前面存储的文本。Receive方法从队列中读取消息,它的值显示在控制台中。在try块的最后部分,队列关闭。

  轻松应用消息

  MSMQ组合Windows和.NET的System.Messaging命名空间,使您可以方便地在.NET应用程序中利用消息。消息提供一种在企业应用程序中异步发送并接收消息(数据)的强大工具。

  1.发送简单消息

  在消息发送前,首先要在控制面板中--添加删除程序--添加删除组件--添加消息队列的组件,然后建立一个私有的消息队列名称,最后,使用中实例化MessageQueue的一个实例并指定其所对应的队列。如下代码

  //实例化MessageQueue,并指向现有的一个名称为VideoQueue队列
  MessageQueue MQ = new MessageQueue(@".\private$\VideoQueue");
  MQ.Send("消息测试","测试消息");

  2. 发送复杂消息:Demo (注意:运行时,请先建立一个名为 ".\private$\Article" 的私有队列)

详解.Net消息队列(MSMQ)应用的更多相关文章

  1. WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ

    之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识(1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的基础文章.在那篇文章里,我们详细介绍了MSMQ ...

  2. C#使用消息队列(MSMQ)

    最近项目用到消息队列,找资料学习了下.把学习的结果 分享出来 首先说一下,消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务,也就是Windows操作系统的功能 ...

  3. PetShop 4.0学习笔记:消息队列MSMQ

    直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...

  4. win7怎么安装消息队列 MSMQ

    win7般都默认装了消息队列只需要进入 控制面板-程序-程序和功能-已安装更新-打开或关闭windows功能 勾选 Microsoft Message Queue (MSMQ)服务器 启动服务 行了: ...

  5. C# 消息队列-MSMQ

    MQ是一种消息中间件技术,所以它能够支持多种类型的语言开发,同时也是跨平台的通信机制,也就是说MQ支持将信息转化为XML或者JSon等类型的数据存储到消息队列中,然后可以使用不同的语言来处理消息队列中 ...

  6. 消息队列MSMQ的使用

    1.MSMQ安装 控制面板-程序和功能-打开或关闭Windows功能-Microsoft Message Queue(MSMQ)服务器,选中所有,点击确定. 2.消息队列的应用场景(转载自http:/ ...

  7. Java并发包源码学习系列:详解Condition条件队列、signal和await

    目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaite ...

  8. RabbitMQ 详解 五种队列-SpiritMark

    上次带大家看了一下RabbitMQ的基本概念,今天我们来详解一下 RabbitMQ的五种队列,也算是一个笔记,如果对您有帮助,可以关注一下,便于下次光顾! 文章目录 1.简单队列 2.work 模式 ...

  9. 消息队列msmq

    http://q.cnblogs.com/q/26895/ 远程队列必须现在运程服务器上创建. 在 Windows Server 2008 上安装 IIS 服务和 MSMQ 功能后,系统会在 IIS  ...

随机推荐

  1. 佛洛依德 c++ 最短路径算法

    //20142880 唐炳辉 石家庄铁道大学 #include<iostream> #include<string> using namespace std; #define ...

  2. 命令行用sublime打开当前目录

    执行    ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" subl 就可以在命令行用 ...

  3. CSS里width: auto\9 是什么意思

    color:red;//一般浏览器识别,字体颜色为红color:blue \9;//IE8,IE9及以上版本识别,字体颜色为蓝*color:orange;//IE7识别,字体颜色为橘色_color:b ...

  4. 使用vs2010创建、发布、部署、调用 WebService

    原文地址:使用vs2010创建.发布.部署.调用 WebService作者:吴超 一 使用vs2010创建 WebService 1 打开VS2010,菜单    文件->新建->项目2 ...

  5. Chrome谷歌浏览器下不支持css字体小于12px的解决办法

    先来看下 ie.火狐.谷歌浏览器下各个字体显示情况 ie下: 火狐下: 谷歌下: 从上面的图可以很明显看出谷歌下 css设置字体大小为12px及以下时,显示都是一样大小,都是默认12px; 那么网上一 ...

  6. 记录centos6.8安装Oracle10.2.0.1过程中的错误解决

    [root@hadoop01 database]# ./runInstaller ./runInstaller: /opt/database/install/.oui: /lib/ld-linux.s ...

  7. SpringMVC之controller篇

    概述 继 spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  8. [Docker] Docker简介

    一.简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间 ...

  9. bizagi simulation 仿真学习

    Level 1 - Process Validation 1. maximum arrival count Define the number of token instances the proce ...

  10. nodejs新建服务器

    var http = require('http');// var optfile = require('./models/optfile'); http.createServer(function ...