消息队列(也称为 MSMQ)是一种消息基础结构和开发工具,用于创建 Microsoft Windows 的分布式消息应用程序。为消息队列开发的应用程序将消息发送到队列,队列是临时存储位置,如果条件允许,消息可以继续到达其最后目标位置。此类应用程序可以在异类网络之间通信,可以在可能暂时无法连接到另一台计算机的计算机之间发送消息。消息队列提供了以下好处:
-
保证的消息传递
-
高效路由
-
提高的安全性
-
支持发送事务中的消息
-
基于优先级的消息传递
具有以上功能的软件产品通常在行业中称为:
-
消息队列软件
-
存储和转发软件
-
面向消息的中间件
借助消息队列,最终用户可以在可能处于脱机状态的网络和计算机之间通信,而不管网络和计算机的当前状态如何。系统管理员可以使用消息队列高效地管理大型、复杂的计算机网络和消息队列。
本主题介绍可用于消息队列的功能。
消息队列服务器
该功能是消息队列的核心组件,使用它可以执行基本的消息队列功能。有关消息队列服务器功能的详细信息,请参阅“什么是消息队列”(
目录服务集成
使用此功能可将队列属性发布到 Active Directory,使用在 Active Directory 中注册的证书体验全新的身份验证和消息加密,并在多个站点之间路由消息。有关目录服务集成功能的详细信息,请参阅“目录服务集成功能”(
消息队列触发器
此功能实现根据您为给定队列中的传入消息定义的筛选器来调用 COM 组件或可执行文件。有关消息队列触发器功能的详细信息,请参阅“触发器概述”(
HTTP 支持
使用此功能可以通过 HTTP 发送和接收消息。有关 HTTP 支持功能的详细信息,请参阅“Internet 消息”(
多播支持
使用此功能可以将多播消息排队并发送到多播 IP 地址。有关多播支持功能的详细信息,请参阅“IP 多播”(
路由服务
此功能路由不同站点之间以及站点内的消息。有关路由服务功能的详细信息,请参阅“消息队列路由”(
消息队列 DCOM 代理
此功能使 MSMQ DCOM API 能够连接到远程消息队列服务器。
子队列
此功能使您可以逻辑分组队列中的消息,而无须创建另一物理队列。子队列是隐式创建的本地队列,是物理队列的逻辑部分。应用程序可以使用子队列分组消息。
移动消息
您可以按以下三种方式之一移动消息:
-
使用“移动消息”对话框。
-
执行剪切和粘贴操作。
-
执行拖放操作。
可以在同一主队列的子队列之间移动消息,或从主队列向子队列移动消息。无法将消息从某个主队列移动到其他主队列的子队列,也无法在两个主队列之间或不同主队列的两个子队列之间移动消息。
消息的移动方向是从源队列移动到目标队列。除了当前移动计数,消息的属性保持不变。
基于应用程序的死信队列
Message Queuing 4.0 中引入了基于应用程序的死信队列,以便每个应用程序可以使用其自身的死信队列。应用程序可以通过将 PROPID_M_DEADLETTER_QUEUE 属性用作消息的一部分请求其自身的死信队列。不是将消息发送到系统事务性死信队列,而是将其发送到在 PROPID_M_DEADLETTER_QUEUE 属性中指定的队列。
PROPID_M_DEADLETTER_QUEUE 可以设置为事务性队列的任意合法路径。相对于将否定确认 (NACK) 消息移动到队列的队列管理器,该事务性队列必须是本地队列。队列路径名 (
事务性远程接收
事务性远程接收从远程队列事务性接收消息。在某些情况下事务性远程接收是必需的。例如,当远程中心队列中的工作订单需要在应用程序服务器场中处理时,事务性远程接收将使消息处理在服务器场中负载平衡。
处理大量“消息队列”队列的能力
Message Queuing 5.0 中引入了以下新功能,随 Windows 7 和 Windows Server 2008 R2 一同发行:
与 Message Queuing 4.0 相比,Message Queuing 5.0 提供了用于处理更大数量的队列的功能。尽管 Message Queuing 4.0 未对可创建的队列数目实行特定限制,但在创建数千个队列时,还是会对性能造成负面影响。特别是将大量队列加载到内存中时,会因所用的队列查找算法而大大增加 Message Queuing 4.0 服务的启动时间。Message Queuing 5.0 在启动时使用的队列查找算法已进行了优化,当系统上承载大量队列时可以显著提高消息队列的启动性能。
其他参考
消息队列功能 (