china-pub.com 第20章ASP和消息队列服务器 上一章讨论了如何使用COM+添加应用程序和组件的事务处理能力。本章研究另一种增 加应用程序可扩展性的方法 迄今为止,我们假设一个服务器是一个始终有效的完美世界,但是如果没有这个前提, 整个的系统会崩溃吗?显然不会。不过有必要采用一个异步通信系统,通常称为消息或者消 息队列。 在消息方案中,应用程序不再是执行一般的方法调用和等待一个响应,取而代之的是, 调用者简单地发一个“消息”给服务器,然后按正常程序进行处理,因此消息不仅允许客户 处理其他工作,而且由于利用了 Microsoft消息队列(MSMQ),服务器甚至可以是不可用的, 因为消息可以被排队并在以后处理。 本章将讨论消息排队的以下几个方面内容 ·消息排队的定义 MSMQ及其结构 MSMQ的管理 如何使用COM对象与MSMQ交互。 在ASP应用程序中MSMQ组件的使用。 MSMQ消息的异步响应 ·如何将MSMQ合并到事务中。 首先,介绍消息排队的背景知识。 20.1消息排队的定义 消息排队是允许不同的应用程序使用“存储和传送”过程进行彼此交流的系统 这些应用程序可以在相同或不同的硬件平台上。这些平台可以位于同一场所、同一LAN 或者是由电子装置相连的任何地方,这种连接甚至不需要是永久的或可靠的,除此之外,这 些平台甚至可在不同的操作系统中运行 听起来好像是一个非常复杂的系统。当今 Internet世界的特点是各种各样的应用程序 各种不同的地理位置、各种各样的连接类型和操作系统同时存在。能在这些系统之间传送数 据已经成为主张互连的人们的共同目的 在复杂的系统环境中,SQL、ODBC、FTP和HTTP等技术都为数据在系统之间传送提供 了不同的机制,这些技术的主要缺点是面向特定的应用程序类型。当数据需要在复杂的平台 间有效转换时,非常需要一种中间的应用程序。交换数据的格式和平台到平台的交互规则应 当留给特定的应用程序去完成。这种技术只是一个通信信道。利用这些系统已经创建出大量 系统的事实,并不意味着不存在更为有效的通信方法。 消息中间件系统在大型计算机领域中是众所周知的,多年来已经成为大容量的事务处理
下载 第20章 ASP和消息队列服务器 上一章讨论了如何使用 C O M +添加应用程序和组件的事务处理能力。本章研究另一种增 加应用程序可扩展性的方法。 迄今为止,我们假设一个服务器是一个始终有效的完美世界,但是如果没有这个前提, 整个的系统会崩溃吗?显然不会。不过有必要采用一个异步通信系统,通常称为消息或者消 息队列。 在消息方案中,应用程序不再是执行一般的方法调用和等待一个响应,取而代之的是, 调用者简单地发一个“消息”给服务器,然后按正常程序进行处理,因此消息不仅允许客户 处理其他工作,而且由于利用了 Microsorft 消息队列( M S M Q ),服务器甚至可以是不可用的, 因为消息可以被排队并在以后处理。 本章将讨论消息排队的以下几个方面内容: • 消息排队的定义。 • MSMQ及其结构。 • MSMQ的管理。 • 如何使用C O M对象与M S M Q交互。 • 在A S P应用程序中M S M Q组件的使用。 • MSMQ消息的异步响应。 • 如何将M S M Q合并到事务中。 首先,介绍消息排队的背景知识。 20.1 消息排队的定义 消息排队是允许不同的应用程序使用“存储和传送”过程进行彼此交流的系统。 这些应用程序可以在相同或不同的硬件平台上。这些平台可以位于同一场所、同一 L A N 或者是由电子装置相连的任何地方,这种连接甚至不需要是永久的或可靠的,除此之外,这 些平台甚至可在不同的操作系统中运行。 这听起来好像是一个非常复杂的系统。当今 I n t e r n e t世界的特点是各种各样的应用程序、 各种不同的地理位置、各种各样的连接类型和操作系统同时存在。能在这些系统之间传送数 据已经成为主张互连的人们的共同目的。 在复杂的系统环境中, S Q L、O D B C、F T P和H T T P等技术都为数据在系统之间传送提供 了不同的机制,这些技术的主要缺点是面向特定的应用程序类型。当数据需要在复杂的平台 间有效转换时,非常需要一种中间的应用程序。交换数据的格式和平台到平台的交互规则应 当留给特定的应用程序去完成。这种技术只是一个通信信道。利用这些系统已经创建出大量 系统的事实,并不意味着不存在更为有效的通信方法。 消息中间件系统在大型计算机领域中是众所周知的,多年来已经成为大容量的事务处理
588s:3商程 Chinapub.com 下载 应用程序的模式。在个人计算机中也有许多消息技术,但我们主要考虑MSMQ,因为MSMQ 与ASP和其他微软开发工具紧密相关 20.1.1MsMQ的定义 MsMQ的基本概念非常简单,就是应用程序的电子邮件 与电子邮件一样,MSMQ消息也有发送者和接收者。然而接收者有些不同,MSMQ中消 息接收者定义为访问队列者(这是由 Windows域安全性设置的)。这样在单一的队列中多个接收 者能够响应单一的消息。在大多数使用MSMQ的网络应用程序中,消息的发送者是Web服务 器(IS),消息的接收者是自定义的应用程序。 当MSMQ消息形成后,即被打包到一个“容器”中,并发送到一个队列中,等待接收者 读取。这些队列不管网络连接的状态和可靠性如何,都能够保证消息传送(存储和传送) 自定义应用程序不一定在不同的机器上,但是放在另一台机器上可提供更好的 可扩展性。 在大多数使用MSMQ的ASP应用程序中,消息从ASP脚本或从COM组件中传送到同一个 服务器或另外一个机器中的队列中。一旦消息发送,ASP可以继续进行处理。在后台,另一 个自定义服务器端应用程序(通常用COM相容的工具创建,如 Visual basic或 Visual c++)响应 消息并开始着手处理。另外的一个响应并处理MSMQ消息的可能途径是建立一个使用 Ⅴ SCript来打开队列的SQL7.0服务器作业 MSMQ也可以和其他的消息系统相互通信。 Level8系统正在开发第三方解决方 案用于与其他平台上的MSMQ通信,例如 Sun solaris、 HP UNIX、OS/2、VMS和 AS/400平台等。 1.消息 前面已经提到MSMQ中的消息与电子邮件消息相类似,然而,它们不是发送给单个用户 或一组用户,而是从一个应用程序发送到一个计算机的一个队列中 MSMQ消息主要由三部分构成 标签 目标队列 标签与电子邮件消息中的主题非常相似,大多数情况下标签用来把各种类型的消息分组, 使自定义的应用程序能够区分消息所包含的内容 MSMQ消息的正文是各种各样的,能够保存从字符串、数组到COM对象的任何内容。消 息排队系统本身不检査实际内容,并且消息内容的格式也没有明确的标准。这意味着内容格 式由传递消息的两个应用程序自行决定。 例如,以创建一个Excl应用程序对象为例,载入一个电子表格,并设置MSMQ消息的正 文为 Excel的实例。读取这条消息时, Excel对象的实例就会被取出来。唯一的需要是消息的发 送者和接收者都必须将此组件注册到系统上。 消息也可包括实现专有的消息,例如谁是发送者和接收者、发送的时间标识 甚至是截止日期,即如果超过这一时间不进行读取将删除消息
应用程序的模式。在个人计算机中也有许多消息技术,但我们主要考虑 M S M Q,因为M S M Q 与A S P和其他微软开发工具紧密相关。 20.1.1 MSMQ的定义 M S M Q的基本概念非常简单,就是应用程序的电子邮件。 与电子邮件一样, M S M Q消息也有发送者和接收者。然而接收者有些不同, M S M Q中消 息接收者定义为访问队列者 (这是由Wi n d o w s域安全性设置的)。这样在单一的队列中多个接收 者能够响应单一的消息。在大多数使用 M S M Q的网络应用程序中,消息的发送者是 We b服务 器( I I S ),消息的接收者是自定义的应用程序。 当M S M Q消息形成后,即被打包到一个“容器”中,并发送到一个队列中,等待接收者 读取。这些队列不管网络连接的状态和可靠性如何,都能够保证消息传送 (存储和传送)。 自定义应用程序不一定在不同的机器上,但是放在另一台机器上可提供更好的 可扩展性。 在大多数使用M S M Q的A S P应用程序中,消息从 A S P脚本或从C O M组件中传送到同一个 服务器或另外一个机器中的队列中。一旦消息发送, A S P可以继续进行处理。在后台,另一 个自定义服务器端应用程序 (通常用C O M相容的工具创建,如 Visual Basic或Visual C++)响应 消息并开始着手处理。另外的一个响应并处理 M S M Q消息的可能途径是建立一个使用 V B S c r i p t来打开队列的S Q L 7 . 0服务器作业。 M S M Q也可以和其他的消息系统相互通信。 Level 8系统正在开发第三方解决方 案用于与其他平台上的 M S M Q通信,例如 Sun Solaris、H P _ U N I X、O S / 2、V M S和 A S / 4 0 0平台等。 1. 消息 前面已经提到 M S M Q中的消息与电子邮件消息相类似,然而,它们不是发送给单个用户 或一组用户,而是从一个应用程序发送到一个计算机的一个队列中。 M S M Q消息主要由三部分构成: • 标签。 • 正文。 • 目标队列。 标签与电子邮件消息中的主题非常相似,大多数情况下标签用来把各种类型的消息分组, 使自定义的应用程序能够区分消息所包含的内容。 M S M Q消息的正文是各种各样的,能够保存从字符串、数组到 C O M对象的任何内容。消 息排队系统本身不检查实际内容,并且消息内容的格式也没有明确的标准。这意味着内容格 式由传递消息的两个应用程序自行决定。 例如,以创建一个E x c e l应用程序对象为例,载入一个电子表格,并设置 M S M Q消息的正 文为E x c e l的实例。读取这条消息时, E x c e l对象的实例就会被取出来。唯一的需要是消息的发 送者和接收者都必须将此组件注册到系统上。 消息也可包括实现专有的消息,例如谁是发送者和接收者、发送的时间标识、 甚至是截止日期,即如果超过这一时间不进行读取将删除消息。 588计计ASP 3 高级编程 下载
Chinaopub coM M20 AS RAER M 589 MSMQ消息也包括决定消息读取顺序的优先级属性,它与电子邮件中的优先级非常类似 息中的优先级可以是0~7的任何整数,决定消息存放到队列中的顺序。新添加的消息不一定 就存放在队列的底部。例如一个优先级为6的消息将放在优先级为5的前面。数目越小,优先 级越低。MSMQ消息的缺省优先级为3。但是发送到事务处理消息队列中的消息会将优先级自 动设置为0,这是因为事务忽略优先级 2.队列 消息队列是指消息被目标应用程序取走之前所存放的地方。与电子邮件比较,队列类似 于收件信箱。消息在期满或被读取前存放在队列中(除非清除队列)。 系统中可以有多个队列,但MSMQ支持大量连接的系统的分层结构。然而,在任何具体 的机器中,队列管理器管理着本机的所有队列,通常包含在此机器上预定接收消息的所有队 列,但也不总是这样。如果网络管理员对远程队列管理器进行适当的配置,大多数的消息产 品允许直接确定远程机器中队列的位置。队列管理器决定这个消息的最终目标是否是本地 如果是本地,就把消息放在目标队列中。如果不是本地,通过目录服务器找出目标队列所在 的机器。一旦目标队列服务器收到消息,就将其存放在目标队列中, 每个队列属于单个服务器,但一个服务器可以有多个队列。 队列的主要属性有 ·标签:通常用来定义队列的简单字符串。 ID:用来定义队列的唯一的GUID。 TypeD:用来定义队列类型或组的唯一的GUID Typed很有可能在多个队列中是相同的,这些队列组合在一起执行共同的任务。 另外,在MSMQ20中有四种类型的队列 ·输出队列( outgoing queue):当远程MSMQ服务器不起作用时保存消息。它们为MSMQ 提供了操作灵活性,即使在另外一个服务器不工作时也一样不会丢失消息。不能通过应 用程序使用输出队列,它只能由MSMQ内部用于存储和传送消息 系统队列( system queue):也是由MSMQ内部使用的,对自定义应用程序不起作用的。 这种队列的例子是无法投递的邮件的队列、报告队列和报纸队列 ·公共队列( public queue):它是MSMQ中最常用的一种队列,自定义应用程序用这个队列 完成业务需要。公共队列存储在 Active Directory服务中,因此,对于企业范围内的所有 其他MSMQ服务器都是可知的。 个人队列( private queue):可在自定义应用程序中使用。然而在 Active Directory中没有 个人队列。因而它们对本地计算机以外的应用程序来说是不可用的 虽然消息队列可以通过编程建立,但是多数情况下,消息队列是通过 Computer Management 插件的MSMQ部分建立的,管理MSMQ的有关信息可参考下面的203节“管理MSMQ”的内容。 20.1.2使用MSMQ和ASP的原因 为什么使用MSMQ?为什么不通过DCOM开发使ASP能获得所需功能的简单COM组件? 为了回答这个问题,我们提出以下几个问题 如果正在运行COM对象的服务器不可用怎么办?
M S M Q消息也包括决定消息读取顺序的优先级属性,它与电子邮件中的优先级非常类似。 消息中的优先级可以是 0 ~ 7的任何整数,决定消息存放到队列中的顺序。新添加的消息不一定 就存放在队列的底部。例如一个优先级为 6的消息将放在优先级为 5的前面。数目越小,优先 级越低。M S M Q消息的缺省优先级为3。但是发送到事务处理消息队列中的消息会将优先级自 动设置为0,这是因为事务忽略优先级。 2. 队列 消息队列是指消息被目标应用程序取走之前所存放的地方。与电子邮件比较,队列类似 于收件信箱。消息在期满或被读取前存放在队列中 (除非清除队列)。 系统中可以有多个队列,但 M S M Q支持大量连接的系统的分层结构。然而,在任何具体 的机器中,队列管理器管理着本机的所有队列,通常包含在此机器上预定接收消息的所有队 列,但也不总是这样。如果网络管理员对远程队列管理器进行适当的配置,大多数的消息产 品允许直接确定远程机器中队列的位置。队列管理器决定这个消息的最终目标是否是本地。 如果是本地,就把消息放在目标队列中。如果不是本地,通过目录服务器找出目标队列所在 的机器。一旦目标队列服务器收到消息,就将其存放在目标队列中。 每个队列属于单个服务器,但一个服务器可以有多个队列。 队列的主要属性有: • 标签:通常用来定义队列的简单字符串。 • ID:用来定义队列的唯一的G U I D。 • Ty p e I D:用来定义队列类型或组的唯一的 G U I D。 Ty p e I d很有可能在多个队列中是相同的,这些队列组合在一起执行共同的任务。 另外,在MSMQ 2.0中有四种类型的队列: • 输出队列(outgoing queue):当远程M S M Q服务器不起作用时保存消息。它们为 M S M Q 提供了操作灵活性,即使在另外一个服务器不工作时也一样不会丢失消息。不能通过应 用程序使用输出队列,它只能由 M S M Q内部用于存储和传送消息。 • 系统队列(system queue):也是由M S M Q内部使用的,对自定义应用程序不起作用的。 这种队列的例子是无法投递的邮件的队列、报告队列和报纸队列。 • 公共队列(public queue):它是M S M Q中最常用的一种队列,自定义应用程序用这个队列 完成业务需要。公共队列存储在 Active Directory服务中,因此,对于企业范围内的所有 其他M S M Q服务器都是可知的。 • 个人队列(private queue):可在自定义应用程序中使用。然而在 Active Directory中没有 个人队列。因而它们对本地计算机以外的应用程序来说是不可用的。 虽然消息队列可以通过编程建立,但是多数情况下,消息队列是通过Computer Management 插件的M S M Q部分建立的,管理M S M Q的有关信息可参考下面的2 0 . 3节“管理M S M Q”的内容。 20.1.2 使用M S M Q和A S P的原因 为什么使用M S M Q?为什么不通过D C O M开发使A S P能获得所需功能的简单C O M组件? 为了回答这个问题,我们提出以下几个问题: • 如果正在运行C O M对象的服务器不可用怎么办? 第2 0章 A S P和消息队列服务器计计589 下载
590Ap;高程 China-pub. coM 下载 ·如果运行时间太长,ASP页超时而且用户放弃怎么办? 如果由于在正常时间内因为表格锁定或处理器紧张而不能进行处理怎么办? 这些问题是开发MSMQ服务的原因。通过使用MSMQ,这些问题可以通过相对比较简单 的方法来解决。 (1)如果正在运行COM对象的服务器不可用该怎么办? 如果客户不是直接和COM对象对话而是发给MSMQ一个消息,则在客户和服务(COM)对 象之间提供另一抽象层。这就是所谓的异步通信的松散连接。 当然,通常COM对象不能自己运行,但可以开发响应消息和调用COM对象功能的服务器 端可执行程序。由于客户与后台分离,只要Web服务器(IS)安装了MSMQ客户,客户可以仅 仅发出消息并继续运行 (2)如果运行时间太长怎么办? 这个问题的解决方法和上面的情况一样。通过把处理工作移到后台服务器上进行,客户 就不必等到任务完成 (3)如果由于在正常时间内不能进行处理该怎么办? 如果处理工作在正常的高峰时间内不能完成,这个任务可以存放在消息队列中直到预定 的服务器端可执行程序准备处理此项任务(队列中的消息),这允许任何数量的消息或任务同时 存储或运行。 这就是所谓的批处理。 速度与可用性的比较 通常消息中间件被认为是一种提高可用性和可扩展性的技术。这不应该与速度混淆。消 息总是比低层的内部处理通信的方法要慢,如套接字( Socket或命名管道( named pipe)。毕竟 消息最终要利用这些方法来传递。中间件技术向通信协议基本性能增加了协商( negotiation)和 通告( notification)的开销。 消息中间件认为不论技术怎么快,都达不到足够快的速度。这不仅包括处理器也包括通 信。除非机器能在零时间内无限装载,否则总有可能过载,这就是消息中间件的设计原因 首先,通过将异步通信引入到处理中,在等待一个消息的响应时,客户可以去处理别的 任务。因为队列管理器把输入的消息存放在一个缓冲区中,即队列中。接收服务器没有必要 具有足以处理峰值通信量的速度,仅仅需要满足系统中通信量的平均值的处理需求。在峰值 过程中,进入的额外消息将退到队列中去,当通信量减少时再发送,然后从队列中清除。在 有额外消息退到队列中去时,对于必须同步处理消息的系统会失败,即可用性差。但是异步 消息系统的服务仍然可用 因而,消息是一个可扩展的解决方法,异步消息系统的优点在于可以成功地处 理更多的通信量,而不在于处理速度。 这也说明了低层协议中增加的附加特性的作用。消息中间件对企业级系统提供一系列重 要的特性以降低额外开销 它改善了可用性 它考虑了偶然断开计算机连接这种可能出现的情况,这在基本协议中是不允许的 它允许传送者和接收者知道发出的消息已收到,并且一旦收到就能知道
• 如果运行时间太长,A S P页超时而且用户放弃怎么办? • 如果由于在正常时间内因为表格锁定或处理器紧张而不能进行处理怎么办? 这些问题是开发 M S M Q服务的原因。通过使用 M S M Q,这些问题可以通过相对比较简单 的方法来解决。 ( 1 )如果正在运行C O M对象的服务器不可用该怎么办? 如果客户不是直接和 C O M对象对话而是发给 M S M Q一个消息,则在客户和服务 ( C O M )对 象之间提供另一抽象层。这就是所谓的异步通信的松散连接。 当然,通常C O M对象不能自己运行,但可以开发响应消息和调用 C O M对象功能的服务器 端可执行程序。由于客户与后台分离,只要 We b服务器( I I S )安装了M S M Q客户,客户可以仅 仅发出消息并继续运行。 ( 2 )如果运行时间太长怎么办? 这个问题的解决方法和上面的情况一样。通过把处理工作移到后台服务器上进行,客户 就不必等到任务完成。 ( 3 )如果由于在正常时间内不能进行处理该怎么办? 如果处理工作在正常的高峰时间内不能完成,这个任务可以存放在消息队列中直到预定 的服务器端可执行程序准备处理此项任务 (队列中的消息),这允许任何数量的消息或任务同时 存储或运行。 这就是所谓的批处理。 1. 速度与可用性的比较 通常消息中间件被认为是一种提高可用性和可扩展性的技术。这不应该与速度混淆。消 息总是比低层的内部处理通信的方法要慢,如套接字 ( S o c k e t )或命名管道(named pipe)。毕竟 消息最终要利用这些方法来传递。中间件技术向通信协议基本性能增加了协商 ( n e g o t i a t i o n )和 通告( n o t i f i c a t i o n )的开销。 消息中间件认为不论技术怎么快,都达不到足够快的速度。这不仅包括处理器也包括通 信。除非机器能在零时间内无限装载,否则总有可能过载,这就是消息中间件的设计原因。 首先,通过将异步通信引入到处理中,在等待一个消息的响应时,客户可以去处理别的 任务。因为队列管理器把输入的消息存放在一个缓冲区中,即队列中。接收服务器没有必要 具有足以处理峰值通信量的速度,仅仅需要满足系统中通信量的平均值的处理需求。在峰值 过程中,进入的额外消息将退到队列中去,当通信量减少时再发送,然后从队列中清除。在 有额外消息退到队列中去时,对于必须同步处理消息的系统会失败,即可用性差。但是异步 消息系统的服务仍然可用。 因而,消息是一个可扩展的解决方法,异步消息系统的优点在于可以成功地处 理更多的通信量,而不在于处理速度。 这也说明了低层协议中增加的附加特性的作用。消息中间件对企业级系统提供一系列重 要的特性以降低额外开销: • 它改善了可用性。 • 它考虑了偶然断开计算机连接这种可能出现的情况,这在基本协议中是不允许的。 • 它允许传送者和接收者知道发出的消息已收到,并且一旦收到就能知道。 590计计ASP 3 高级编程 下载
chinaopub coM M20 3 AS RAER 591 载 当我们继续学习本章内容时,请记住速度在创建可扩展的企业级系统时并不是最重要的 2.消息与同步通信的比较 应用程序之间的通信不一定必须使用消息队列来进行,如果业务环境需要同步完成一些 工作,那么像DCOM这样的通信方法更适合执行这种类型的处理。如果每个应用程序都连接 到LAN,并且所有应用程序的服务器是在快速的、本地的、可靠的链路上进行连接的,也可 以不用消息。另外,对许多开发人员来说,消息队列是新的和不熟悉的技术。他们可能不愿 意在这方面花费精力 下面的准则可以帮助你决定使用消息队列: 如果与你通信的应用程序不能保证与你的应用程序在同一时间运行。 如果消息很重要,丢失将会导致严重后果 如果应用程序不是总和接收者的应用程序相连接。 ·如果异步执行许多与其他应用程序的通信任务,并且可能不关心它们的响应 20.2MsMQ结构 MSMQ系统结构的基本部分是消息、队列、队列管理器和允许程序访问信息的接口。系 统在物理位置方面工作是透明的。这意味着应用程序将消息发送到另一应用程序中时,可以 不必关心消息实际上是如何到达对方的。MSMQ为在系统中查找可用的队列提供设施。一旦 应用程序发现感兴趣的队列,就可以发送消息给它而不必关心消息是如何到达那里的 MSMQ控制消息所走的路径,并可以(如果有必要)保证消息到达最终目的地 MsMQ结构由一对多服务器和工作站构成,它们负责路由、发送和接收消息。 每个计算机可以包含多个消息队列,并且在每个队列内可以包含多个消息 202.1服务器类型 MSMQ可以安装在各种各样的服务器和客户上。MSMQ有四种不同的服务器安装: 主企业控制器 ·主站点控制器 备用站点控制器。 路由器 主企业控制器 主企业控制器(PEC是MSMQ结构的根层,为使MSMQ实现正常的功能,每个企业网络必 须包含一个PEC。在MSMQ1.0中,PEC需要 SQL Server6.5或更高版本。在MSMQ2.0中,由 于消息和队列存储在 Active Directory服务(ADS)中,因此,不需要 SQL Server ADS是 Windows2000的一部分。在NT4上,在MSMQ2.0安装前,必须安装 ADS。任一版本ADS只能在 Windows nt4 Server上或 Windows2000 Server上安装。 EC是大多数的队列存储的地方,尤其是在较小的网络中。随着网络规模的扩大,对远 程站点来说,在主站点控制器中保留自己的队列可能更为高效 PEC常常位于公司总部或主要分部,这是因为所有其他服务器必须能够访问PEC并向其注
当我们继续学习本章内容时,请记住速度在创建可扩展的企业级系统时并不是最重要的 因素。 2. 消息与同步通信的比较 应用程序之间的通信不一定必须使用消息队列来进行,如果业务环境需要同步完成一些 工作,那么像 D C O M这样的通信方法更适合执行这种类型的处理。如果每个应用程序都连接 到L A N,并且所有应用程序的服务器是在快速的、本地的、可靠的链路上进行连接的,也可 以不用消息。另外,对许多开发人员来说,消息队列是新的和不熟悉的技术。他们可能不愿 意在这方面花费精力。 下面的准则可以帮助你决定使用消息队列: • 如果与你通信的应用程序不能保证与你的应用程序在同一时间运行。 • 如果消息很重要,丢失将会导致严重后果。 • 如果应用程序不是总和接收者的应用程序相连接。 • 如果异步执行许多与其他应用程序的通信任务,并且可能不关心它们的响应。 20.2 MSMQ结构 M S M Q系统结构的基本部分是消息、队列、队列管理器和允许程序访问信息的接口。系 统在物理位置方面工作是透明的。这意味着应用程序将消息发送到另一应用程序中时,可以 不必关心消息实际上是如何到达对方的。 M S M Q为在系统中查找可用的队列提供设施。一旦 应用程序发现感兴趣的队列,就可以发送消息给它而不必关心消息是如何到达那里的。 M S M Q控制消息所走的路径,并可以 (如果有必要)保证消息到达最终目的地。 M S M Q结构由一对多服务器和工作站构成,它们负责路由、发送和接收消息。 每个计算机可以包含多个消息队列,并且在每个队列内可以包含多个消息。 20.2.1 服务器类型 M S M Q可以安装在各种各样的服务器和客户上。 M S M Q有四种不同的服务器安装: • 主企业控制器。 • 主站点控制器。 • 备用站点控制器。 • 路由器。 1. 主企业控制器 主企业控制器( P E C )是M S M Q结构的根层,为使M S M Q实现正常的功能,每个企业网络必 须包含一个P E C。在MSMQ 1.0中,P E C需要SQL Server 6.5或更高版本。在MSMQ 2.0中,由 于消息和队列存储在Active Directory服务( A D S )中,因此,不需要SQL Server。 A D S是Windows 2000的一部分。在 NT 4上,在MSMQ 2.0安装前,必须安装 A D S。任一版本A D S只能在Windows NT 4 Server上或Windows 2000 Server上安装。 P E C是大多数的队列存储的地方,尤其是在较小的网络中。随着网络规模的扩大,对远 程站点来说,在主站点控制器中保留自己的队列可能更为高效。 P E C常常位于公司总部或主要分部,这是因为所有其他服务器必须能够访问 P E C并向其注 第2 0章 A S P和消息队列服务器计计591 下载