更新:2007 年 11 月
利用 Microsoft Windows“消息队列”,应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。如果您不熟悉 MessageQueue 技术,本页为您提供了一些基本术语和概念的简要概述。
消息处理中的主要概念
message 是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。
“消息队列”(Microsoft 消息处理技术)为任何应用程序提供消息处理和消息队列功能。此外,它还在装有 Microsoft Windows 的计算机的任意组合之间提供消息处理和消息队列功能,这与这些计算机是否在同一个网络上或者是否同时联机无关。
“消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。
“消息队列”安装期间,管理员确定哪些服务器可以互相通信,并设置特定服务器的特殊角色。构成此“消息队列”网络的计算机称为“站点”,它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”,它由管理员确定,指示了经过此站点链接传递消息的频率。
“消息队列”管理员还在网络中设置一台或多台作为“路由服务器”的计算机。路由服务器查看各站点链接的开销,确定经过多个站点传递消息的最快和最有效的方法,以此决定如何传递消息。
下图显示了“消息队列”站点的典型配置以及它们的交互方式:
站点间的消息路由
![]() |
---|
开发期间不必担心消息路由的细节,因为管理员可以调整“消息队列”网络以高效传递消息。 |
队列类型
有两种主要类别的队列:由您或网络中的其他用户创建的队列和系统队列。用户创建的队列可能是以下任何一种队列:
“公共队列”在整个“消息队列”网络中复制,并且有可能由网络连接的所有站点访问。
**“专用队列”**不在整个网络中发布。相反,它们仅在所驻留的本地计算机上可用。专用队列只能由知道队列的完整路径名或标签的应用程序访问。
**“管理队列”**包含确认在给定“消息队列”网络中发送的消息回执的消息。指定希望 MessageQueue 组件使用的管理队列(如果有的话)。
**“响应队列”**包含目标应用程序接收到消息时返回给发送应用程序的响应消息。指定希望 MessageQueue 组件使用的响应队列(如果有的话)。
系统生成的队列一般分为以下几类:
**“日记队列”**可选地存储发送消息的副本和从队列中移除的消息副本。每个“消息队列”客户端上的单个日记队列存储从该计算机发送的消息副本。在服务器上为每个队列创建了一个单独的日记队列。此日记跟踪从该队列中移除的消息。
**“死信队列”**存储无法传递或已过期的消息的副本。如果过期消息或无法传递的消息是事务性消息,则被存储在一种特殊的名为“事务性死信队列”的死信队列中。死信存储在过期消息所在的计算机上。有关超时期限和过期消息的更多信息,请参见默认消息属性。
**“报告队列”**包含指示消息到达目标所经过的路由的消息,还可以包含测试消息。每台计算机上只能有一个报告队列。
**“专用系统队列”**是一系列存储系统执行消息处理操作所需的管理和通知消息的专用队列。
在应用程序中进行的大多数工作都涉及访问公共队列及其消息。但是,根据应用程序的日记记录、确认和其他特殊处理需要,在日常操作中很可能要使用几种不同的系统队列。
同步和异步通信
队列通信在本质上是“异步”的,因为将消息发送到队列和从队列中接收消息是在不同的进程中完成的。另外,还可以异步执行接收操作。希望接收消息的用户可以针对任何给定的队列调用 BeginReceive 方法,然后立即执行其他任务,而无需等待回复。这与人们所了解的“同步通信”截然不同。
在同步通信中,请求的发送方在执行其他任务前,必须等待来自预定接收方的响应。发送方等待的时间完全取决于接收方处理请求和发送响应所用的时间。
![]() |
---|
消息的同步或异步“检索”是一个独立于消息发送的问题。消息总是异步“发送”。 |
有关消息队列中异步处理的更多信息,请参见异步消息处理。
消息安全性
可用如下方式帮助保护发送和接收的消息内容:
可使用身份验证验证应用程序接收的消息的来源。
可使用加密确保未经授权的人无法读取或使用您的消息。
可以使用访问控制权限,用基于 ACL 的安全性限制用户并用代码访问安全性限制代码向计算机上的特定队列发送消息或从中读取消息。
可使用审核记录尝试访问“消息队列”对象的用户,尝试的操作类型,以及该访问成功还是失败。
有关更多信息,请参见消息队列安全性。
安装“消息队列”
如果要在代码或“服务器资源管理器”中使用消息队列,则必须在开发计算机上安装“消息队列”。在 Windows 2000 或 Windows NT 文档中可以找到有关如何安装“消息队列”的说明。在安装时,必须指定正在创建的新主“消息队列”服务器所起的作用:是充当新网络的集线器、现有网络的独立客户端还是现有网络的依赖客户端。多数情况下,不用创建新的网络,而是可以加入公司或工作组的现有“消息队列”网络。
在何处获得背景阅读材料
本节中的其余各页为您提供了在应用程序中使用“消息队列”组件所需的信息。如果需要有关 Visual Studio 或 .NET Framework 环境之外的消息处理技术的更多信息,可以从 Microsoft 网站和该网站上的 MSDN Library 中获得许多可用的信息源:
有关信息 |
请参见 Windows 2000 Server 文档中的此页 |
---|---|
安装“消息队列”网络 |
安装“消息队列” |
一般的“消息队列”概念 |
了解“消息队列” |
微调“消息队列”的性能 |
管理“消息队列” |