* 摘要
。基本概念
。MSMQ简介
。创建、删除和管理队列
。发送和序列化消息
。读取和接收消息
。消息使用实例

* 基本概念
。“消息”:是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象。
。“消息队列”:是在消息的传输过程中保存消息的容器。消息队列管理在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
。“消息队列”是Microsoft的消息处理技术,它在任何安装了Microsoft Windows的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。

* 队列类型
。用户队列
-公共队列:在整个“消息队列”网络中复制,并且有可能由网络连接的所有站点访问。
-“专用队列”不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。
-“管理队列”包含确认在给定“消息队列”网络中发送的消息回执的消息。
-“响应队列”包含目标应用程序接收到消息时返回给发送应用程序的响应消息。
。系统队列
-“日记队列”可选地存储发送消息的副本和从队列中移除的消息副本。
-“死信队列”存储无法传递或已过期的消息副本。
-“报告队列”包含指示消息到达目标所经过的路由的消息,还可以包含测试消息。每台计算机上只能有一个报告队列。
-“专用系统队列”是一系列存储系统执行消息处理操作所需的管理和通知消息的专用队列。

* 使用消息队列的优点
。稳定性-组件失败对消息的影响程序远远小小组件间的直接调用,因为消息存储在队列中并一直留在那里,直到被适当地处理。
。消息优先级-更紧急或更重要的消息可在相对不重要的消息之前接收,因此可以为关键的应用程序保证足够的响应时间。
。脱机能力-发送消息时,它们可被发送到临时队列中并一直留在那里,直到被成功地传递。
。安全性-MessageQueue组件基于的消息队列技术使用Windows安全来保护访问控制,提供审核,并对组件发送和接收的消息进行加密和验证。

* Microsoft Message Queue
。利用Microsoft Windows“消息队列”,应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通讯。
。MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web Services或.Net Remoting组件时,Client端需要和Server端实时交换信息,Server需要保持联机。MSMQ则可以在Server离线的情况下工作,将Message临时保存在Client端的消息队列中,以后联机时再发送到Server端处理。
。采用MSMQ带来的好处是:由于是异步通信,无论是发送发还是接收方都不用等待对方返回成功消息,就可以执行余下的代码,因而大大地提高了事物处理的能力。

* MSMQ与Email
。MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式,松散连接的消息通讯应用程序的开发工具。
。消息队列和电子邮件有着很多相似处,他们都包含多个属性,用于保存消息,消息类型中都指出发送者和接收者的地址;
。然而他们的用处却有着很大的区别:消息队列的发送者和接收者是应用程序,而电子邮件的发送者和接收者通常是人。

* MessageQueue编程结构
。MessageQueue位于名称空间System.Messaging。
。MessageQueue基类中的主要编程元素:
-使用Create方法创建使用指定路径的新消息队列,并使用Delete方法删除现有队列。
-使用Exists方法查看特定消息队列是否存在。
-使用GetPublicQueues方法在“消息队列”网络中定位消息队列。
-使用Peek或BeginPeek方法查看某个特定队列中的消息但不从该队列中移除消息。
-使用Receive和BeginReceive方法检索指定队列最前面的消息并将其从该队列中移除。
-使用Send方法将消息发送到指定队列。

* 在.Net环境下编写Message Queue程序
1)先安装Message Queuing Services
-通过控制面板,“添加或删除程序”-“添加/删除Windows组件”步骤安装MSMQ。
-MSMQ可以安装为工作组模式或域模式。
2)配置MSMQ
-打开“计算机管理”-消息队列,在“专用队列”下创建指定的队列
3)编写代码
-MessageQueue类提供对“消息队列”队列的引用。

* 创建、删除和管理队列
。创建队列:
-创建队列以提供消息处理组件可与之交互的资源。
-有两种创建队列的方法:使用“服务器资源管理器”窗口或使用代码中的Create构造函数。
-以编程方式创建公共队列:
MessageQueue.Create(@"myMachine\MyQueue");
-以编程方式创建专用队列:
MessageQueue.Create(@".\Private$\MyPrivateQueue");
。删除队列
-MessageQueue.Delete(@"myMachine\MyQueue");

* 创建、删除和管理队列
。清除队列内容
-可使用Purge方法清除在“消息队列”系统中具有其访问权限的任何队列的内容。
-MessageQueue MessageQueue1=new MessageQueue();
-MessageQueue1.Path=(@"myMachine\MyQueue");
-MessageQueue1.Purge();

* 队列引用
。通过路径——唯一标识计算机和感兴趣的队列的名称的路径。
-公共队列MechineName\QueueName
-专用队列MachineName\Private$\QueueName
。通过格式名-队列的唯一标识符,创建队列时由MSMQ生成,或者后来由应用程序生成。
-公共队列FORMATNAME:PUBLIC=QueueGUID
-专用队列FORMATNAME:PRIVATE=MachineGUID\QueueNumber
。通过标签——可能不唯一的描述性队列名称,创建队列时由队列管理员指派。
-MessageQueue1.Path="LABEL:MyQueue";

* 发送消息
。MSMQ消息队列中定义的消息由一个主体(body)和若干属性构成。消息的主体可以由文本,二进制构成,根据需要还可以被加密。在MSMQ中消息的大小不能够超过4MB
。简单消息的发送:步骤大致为:
-建立与要发送消息的队列的连接
-指定你要发送的消息的格式
-提供要发送的数据
-使用Send方法将消息发送出去
。发送复杂消息的步骤大致为:
-创建一个MessageQueue的实例,然后对它的Path属性设置,以指明操作的消息队列。
-创建一个消息对象实例。
-设置消息的主体(body),然后修改不希望使用缺省值的属性。
-同样使用Send方法把消息对象发送至相应的队列中。

* 接收消息
。收消息由两种方式:
-通过Receive方法接收消息同时永久性地从队列中删除消息;
-通过Peek方法从队列中取出消息而不从队列中移除该消息。
。消息的接收分为两种,即同步和异步
-同步方式,我们使用receive方法。当调用receive方法时,它会从指定的消息队列中选取出第一个适合要求的消息对象返回给用户,然后把它从消息队列中删除。
-异步接收方式,是指接收消息时,不必理会调用的消息接收方法是否成功,方法将立即返回,并继续进行程序处理。

* 读取消息
。在应用程序能够阅读的消息和消息队列中的消息格式不同,因而应用程序发送出去的消息经过序列化以后才发送给了消息队列,这一过程 由系统自动完成了。
。消息的序列化可以通过.NET Framework附带的三个预定义的格式化程序来完成:
-XMLMessageFormatter对象(MessageQueue组件的默认格式化程序设置)
-BinaryMessageFormatter对象。
。由于后两者格式化后的消息通常不能为人阅读,所以我们经常用到的是XMLMessageFormatter对象。
。使用XMLMessageFormatter对象格式化消息的代码如下所示:
string[] types={"System.String"};
((XmlMessageFormatter)mq.Formatter).TargetTypeNames=types;
-Message m=mq.Receive(new TimeSpan(0,0,3));

* 事务性消息处理
。利用事务性处理,您可以确保事务中的消息按照顺序传送,只传送一次,并且从目的队列成功地被检索。
。内部事务是通过创建MessageQueueTransaction类的实例并将其关联到MessageQueue组件的实例来执行的。内部事务是最简单的事务类型
。内部事务的编程模型非常简单——调用MessageQueueTransaction类的Begin方法,瓶装将此类的实例传递到收发方法。然后,调用Commit以将事务

的更改保存到目的队列。

转载于:https://www.cnblogs.com/iceberg2008/archive/2009/04/17/1438343.html

第四十讲 ASP.NET消息处理(一)相关推荐

  1. 第四十讲 项目5 张三、李四、王五、刘六的年龄等差问题

    任务和代码 /* *Copyright (c)2016,CSDN学院 | C语言及程序设计初步 *All rights reserved. *文件名称:p40-5.c *作 者:管运煌 *完成日期:2 ...

  2. 第四十讲项目三 鸡兔同笼

    1.任务和代码 /* copyright\c)2017,csdn学院 *All cights reserved *文件名称:a.c *作者:王琦 *完成日期:2017年4月24日 *版本号:6.0 * ...

  3. 概率论与数理统计学习笔记——第四十讲——卡方分布

    1. 卡方分布是一种重要的分布 2. 卡方分布的定义 3. 卡方分布的概率密度 4. 卡方分布的性质

  4. 如何选择适合你的兴趣爱好(四十),美食

    围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第四十讲--美食.美食,顾名思义就是美味的食物,贵的有山珍海味,便宜的有街边小吃.其实美食是不分贵贱的,只要是自己 ...

  5. 058_《突破Delphi7.0编程实例五十讲》

    <突破Delphi7.0编程实例五十讲> Delphi 教程 系列书籍 (058) <突破Delphi7.0编程实例五十讲> 网友(邦)整理 EMail: shuaihj@16 ...

  6. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  7. 第四十六讲 设备驱动kobject

    第四十六讲 设备驱动 文章目录 第四十六讲 设备驱动 一.sysfs 1.发展 2.sysfs简介 3.kobject 4.kobj_type 二.设备驱动实验 1.代码 2.Makefile 3.实 ...

  8. ceres快速教材及学习笔记(四)bundl adjustment,《视觉slam十四讲》第十讲ceres例子

    0. 前言 本文是根据ceres官方教程内容ceres-solver官方教程链接,再结合自己理解的一个ceres快速学习笔记. 在博文ceres快速教材及学习笔记(一)hello,world!中,我们 ...

  9. 十四个关于ASP.NET基础知识问答(C#版)

    本文转自:乐猪网 十四个关于ASP.NET基础知识问答(C#版) 这是一些ASP.NET很基础的东西,希望对ASP.NET爱好者特别是刚刚入门的朋友有所帮助虽然示例代码是C#.NET,但是不影响VB. ...

  10. 第四十八讲 uevent

    第四十八讲 uevent 文章目录 第四十八讲 uevent 一.uevent 二.uevent实验 1.代码 2.Makefile 3.实验步骤 一.uevent kobject 可以通过 ueve ...

最新文章

  1. Educational Round 66 题解
  2. POJ - 3041 Asteroids 二分图最小点覆盖
  3. PHP函数库之BC高精确度函数库
  4. 3.1 if条件语句
  5. Windows 2000 Active Directory FSMO 角色
  6. 【图像处理】图像去雾的前世今生
  7. 24.go clean
  8. Map遍历KeySet()和EntrySet/ Map.forEach的性能分析
  9. Mac Python IDLE中如何更改字体
  10. ORACLE DELETE数据慢的案例
  11. 使用ARKit编写测量应用程序代码:交互和测量
  12. 如何连接mac与无线打印机?
  13. Mac不能复制拷贝写入文件到移动硬盘,U盘怎么办
  14. 2.5万字讲解DDD领域驱动设计,从理论到实践掌握DDD分层架构设计,赶紧收藏起来吧
  15. UG NX 12 创建有界平面
  16. 人群计数经典方法Density Map Estimation,密度图估计
  17. 三维家可以导入别人的方案吗_怎么把su模型导入三维家
  18. Easy Excel读取复杂表格文件
  19. 高速公路广播系统方案
  20. 弹性地基梁板法计算原理_地下连续墙静力计算和分析.pdf

热门文章

  1. 代码优化能减少多少运行速度_35 个小细节,提升 Java 代码的运行效率!你知道几个?...
  2. vue echarts数据变化重新渲染_vue实例创建及数据挂载渲染
  3. activiti表单设计器_可拖拽的表单设计布局器-echarts-vue-jquery-可视化图表
  4. vrrp协议_Keepalived的高可用基石 - VRRP协议
  5. 昆明职高计算机学校,昆明职高学校,昆明职高学校前十强,昆明职高学校哪些比较好一点 - IT教育频道...
  6. soc设计方法与实现_冷轧钢板局部激光热处理实现汽车轻量化设计新方法
  7. 实战HTML:模仿百度地图制作项目首页
  8. EasyUI:Layout 布局
  9. MySQL 8.0窗口函数介绍(一)
  10. 使用OpenResty搭建高性能服务端