详解.Net消息队列(MSMQ)应用
【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 MQ = new MessageQueue(@".\private$\VideoQueue");
MQ.Send("消息测试","测试消息");
2. 发送复杂消息:Demo (注意:运行时,请先建立一个名为 ".\private$\Article" 的私有队列)
详解.Net消息队列(MSMQ)应用的更多相关文章
- WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ
之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识(1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的基础文章.在那篇文章里,我们详细介绍了MSMQ ...
- C#使用消息队列(MSMQ)
最近项目用到消息队列,找资料学习了下.把学习的结果 分享出来 首先说一下,消息队列 (MSMQ Microsoft Message Queuing)是MS提供的服务,也就是Windows操作系统的功能 ...
- PetShop 4.0学习笔记:消息队列MSMQ
直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...
- win7怎么安装消息队列 MSMQ
win7般都默认装了消息队列只需要进入 控制面板-程序-程序和功能-已安装更新-打开或关闭windows功能 勾选 Microsoft Message Queue (MSMQ)服务器 启动服务 行了: ...
- C# 消息队列-MSMQ
MQ是一种消息中间件技术,所以它能够支持多种类型的语言开发,同时也是跨平台的通信机制,也就是说MQ支持将信息转化为XML或者JSon等类型的数据存储到消息队列中,然后可以使用不同的语言来处理消息队列中 ...
- 消息队列MSMQ的使用
1.MSMQ安装 控制面板-程序和功能-打开或关闭Windows功能-Microsoft Message Queue(MSMQ)服务器,选中所有,点击确定. 2.消息队列的应用场景(转载自http:/ ...
- Java并发包源码学习系列:详解Condition条件队列、signal和await
目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaite ...
- RabbitMQ 详解 五种队列-SpiritMark
上次带大家看了一下RabbitMQ的基本概念,今天我们来详解一下 RabbitMQ的五种队列,也算是一个笔记,如果对您有帮助,可以关注一下,便于下次光顾! 文章目录 1.简单队列 2.work 模式 ...
- 消息队列msmq
http://q.cnblogs.com/q/26895/ 远程队列必须现在运程服务器上创建. 在 Windows Server 2008 上安装 IIS 服务和 MSMQ 功能后,系统会在 IIS ...
随机推荐
- shell脚本自动化部署XX的案例(附数组使用)
#!/bin/sh #Auto Make install MFS Files # cat <<EOF ++++++++++++++++Welcome To Use Auto Install ...
- 网络HTTP协议
WebView:在应用中嵌入一个浏览器 ...... webView = (webView)findViewById(R.id.web_view); webView.getSettings().set ...
- 第一、初识C语言
1·C语言强大而灵活,如python,LISP,FORTRAN,Perl,Logo,BASIC,PASACAL的编译器和解释器都是C语言编写的. 2·C语言的指针错误往往难以察觉,但这恰好告诉我们,一 ...
- java编程者必收藏的十大学习网站-xiaolanglang123 -
3S博客 http://blog.3snews.net/space.php?uid=13924628&do=blog&id=70282
- Python控制window进行简单的消息弹窗
有人提到可以用easygui 稍后尝试一下
- Linux进程管理
一.进程管理简介 进程是正在执行的程序或命令,每一个进程都是一个运行实体,都有自己的地址空间,并占用一定的系统资源. 进程管理的作用: 1.判断服务器的健康状态 2.查看系统中的所有进程 3.杀死进程 ...
- 需求:输入一个年份和月份 ,显示当前月日情况 ,星期数要对应准确 * 1.1900年1月1号开始 * 2.星期 : 直接用总天数对7求余数 31 28 59 / 7 = 5 * 3.以\t来个开
public class Demo4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-gene ...
- 巧用CSS3伪类选择器自定义checkbox和radio的样式
由于原生的checkbox和radio的样式太简陋了,在设计页面的时候,设计师往往会设计自己的checkbox和radio样式.一半情况下,为了适应各个浏览器的兼容性,我们都会用其他的元素替代原生的c ...
- LTE Manual ——Logging(翻译)
LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 9 Logging ns-3 日志功能可以用于监测或调试仿真程序的进展.日志输出可以通过 ma ...
- scss编译
SASS?SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. sass有两种后缀名文件: sass(不使用大括号和分号)---不建议使用 ...