Sun Java 徽标     上一页      目录      索引      下一页     

Sun 徽标
Sun Java System Message Queue 3 2005Q4 技术概述 

第 4 章
代理群集

Message Queue Enterprise Edition 支持使用代理群集:一组协同工作为客户端提供消息传送服务的代理。使用群集,管理员可以将客户端连接分布在多个代理中,从而使用消息流量来扩展消息传送操作。

本章讨论此类代理群集的体系结构和内部功能,涵盖了以下主题:

请注意,代理群集提供服务可用性,但不提供数据可用性。如果某个群集内的一个代理失败,则连接到该代理的客户端能够重新连接到该群集内的另一个代理,但是在这些客户端重新连接到备用代理时可能会丢失一些数据。


群集体系结构

图 4-1 显示 Message Queue 代理群集的体系结构。群集内的每个代理直接与其他所有代理相连。每个客户端(消息生成方或使用方)都有一个本机代理,借助它,该客户端可直接进行通信以收发消息,就好像该代理是群集内的唯一代理。实际上,本机代理与其他代理协同工作,为连接的所有客户端提供传送服务。

在群集内,服务可用性取决于代理能否共享有关目标和长期订户的信息。如果某个群集代理失败,则此状态信息可能会失去同步。要防止这种可能的情况,可以将群集内的某个代理指定为主代理。主代理维护配置更改记录,以跟踪群集的持久性实体(目标和长期订阅)的更改。此记录用于将此类更改信息传播到发生更改时处于脱机状态的代理。

图 4-1 群集体系结构

该图显示三个群集代理,其中一个为主代理。该图用文本进行说明。

以下各节讨论如何在群集内传送消息以及如何配置和同步代理(即使一个或多个代理处于脱机状态)。


消息传送

在群集配置中,代理共享有关目标和消息使用方的信息。每个代理都知道以下信息:

这使每个代理都可以从自己直接相连的消息生成方将消息路由到远程消息使用方。生成方的本机代理与使用方的本机代理具有不同的职责:

多个群集代理可以协同工作以最大限度地降低群集内的消息流量;例如,如果某个远程代理对于同一个主题目标有两个完全相同的订阅,则消息将只通过线路发送一次。可以设置一个目标属性以指定向本地使用方的传送优先于向远程使用方的传送,从而进一步减小流量。

如果要求客户端与代理之间的消息传送安全且经过加密,则可以对群集进行配置,以便在代理之间提供安全的消息传送。

目标属性

为一个群集代理中的物理目标设置的属性适用于群集内该目标的所有实例;但是,由这些属性指定的一些限制会应用于整个群集,而其他属性则应用于单独的目标实例。表 4-1 列出了可以为物理目标设置的属性并指定了它们的适用范围。

表 4-1 群集代理中物理目标的属性 

属性名称

适用范围

maxNumMsgs

每个代理。因此,通过将生成方分布在一个群集中,可以提高对未使用消息的总数的限制。

maxTotalMsgBytes

每个代理。因此,通过将生成方分布在一个群集中,可以提高为未使用消息保留的总内存的限制。

lmitBehavior

全局。

maxBytesPerMsg

每个代理。

maxNumProducers

每个代理。

maxNumActiveConsumers

全局。

maxNumBackupConsumers

全局。

consumerFlowLimit

全局。

localDeliveryPreferred

全局。

isLocalOnly

全局。

useDMQ

每个代理。

群集和目标

无论目标是管理员创建的、自动创建的还是临时的,都会影响该目标在群集内的传播方式以及在连接或代理失败时该目标的处理方式。

图 4-2 显示了四个群集代理。该图显示代理之间的直接(专用)连接,以及客户端与它们所连接到的代理之间的连接。该图说明了以下各节将介绍的多种可能性。

图 4-2 群集示例

该图显示目标在群集内的传播。后面是详细的文字说明。

使用回复模型生成消息并放入队列

如上图所示:

  1. 管理员创建物理目标 QW。创建时,队列在整个群集内复制。
  2. 生成方 ProdQW 向队列 QW 发送一条消息,并使用回复模型将回复定向到临时队列 TempQ1W。(当应用程序创建临时目标并添加使用方时,系统会创建并复制临时队列。)
  3. 本机代理 BrokerW 保持发送到 QW 的消息并将消息路由到第一个符合该消息选择标准的活动使用方。根据哪个使用方准备好接收该消息,将消息传送到使用方 C1QW(位于 BrokerX 上)或使用方 C2QW(位于 BrokerY 上)。接收该消息的使用方会将回复发送到目标 TempQ1W

生成消息并放入自动创建的目标

如上图所示:

  1. 生成方 ProdAutoQY 向代理中不存在的目标 AutoQY 发送一条消息。
  2. 代理保持该消息并创建目标 AutoQY
  3. 自动创建的目标不会自动在群集内复制。只有当某个使用方选择从队列 AutoQY 接收消息时,该使用方的本机代理才创建目标 AutoQY 并将这些消息传递到该使用方。当一个使用方创建自动创建的目标时,该目标将在群集内复制。

发布到主题目标

如上图所示:

  1. 管理员创建物理主题目标 TY。管理员创建的目标 TY 会在使用之前在代理群集内复制。
  2. 发布者 PubTYTY 发送一条消息。
  3. 本机代理 BrokerY 保持发布到 TY 的任何消息,并将这些消息路由到所有符合该消息选择标准的主题订户。

在连接或代理失败时处理目标

表 4-2 解释如何在群集内复制和删除不同种类的目标。

表 4-2 在群集内处理目标 

目标

传播和删除

管理员创建的

该目标创建出来后,会在群集内传播,而且每个代理都永久存储有关该目标的信息。

当该目标由管理员明确删除时,它会被销毁。

如果有一个主代理,则会在主代理中存储有关创建和删除的记录,以使群集内的其他代理可以同步状态信息。

临时

该目标创建出来后,会在群集内传播。

如果允许与临时目标关联的使用方重新连接,则该目标将永久存储在使用方的本机代理中。否则,该目标将永远也不会存储。

如果该使用方的连接断开,则该目标将从所有代理中删除。

如果该使用方的本机代理崩溃,并且允许该使用方重新连接,则与该使用方关联的临时目标将受到监视。如果使用方客户端在特定的时间段内未重新连接,则会假定该客户端出现故障,该目标将被删除。

自动创建

创建生成方时,如果目标不存在,则会在生成方的本机代理中创建一个目标。

为不存在的目标创建使用方时,有关该使用方和目标的信息会在群集内传播。

自动创建的目标可以由管理员明确删除,也可以在以下情况下由每个代理自动删除:

  • 在给定的时间段内没有使用方或消息。
  • 当代理重新启动时,该目标没有消息。


群集配置

要在启动时在群集代理之间建立连接,必须为每个代理传送其他所有代理(包括主代理,如果有)的主机名和端口号。这些信息是通过一组群集配置属性来指定的,对于群集内的所有代理,这些属性应该是相同的。虽然可以为每个代理分别指定配置属性,但这种方法容易出错,并且容易导致群集配置出现不一致的情况。因此,建议您将所有配置属性都集中放在一个群集配置文件中,供每个代理在启动时引用。这样,就可以确保所有代理共享相同的配置信息。

有关群集配置属性的详细信息,请参见 Message Queue 管理指南


虽然群集配置文件原本是用来配置群集的,但也可以方便地使用它来存储群集内的所有代理共有的其他属性。



群集同步

每次更改群集的配置时,有关更改的信息都会自动传播到群集内的所有代理。发生以下事件之一时,会更改群集配置:

有关这些更改的信息会立即传播到群集内发生更改时处于联机状态的所有代理。但是,发生更改时,处于脱机状态的代理(例如,已崩溃的代理)不会收到更改通知。为了给脱机代理提供该信息,Message Queue 维护群集的配置更改记录,其中记录了已创建或已销毁的所有持久性实体(目标和长期订阅)。当脱机代理恢复为联机状态时(或向群集添加新代理时),会查阅此记录以获取有关目标和长期订户的信息,然后与其他代理交换有关当前活动的消息使用方的信息。

群集内的某个代理被指定为主代理,该主代理负责维护配置更改记录。因为在没有主代理的情况下其他代理无法完成初始化,所以应该始终首先启动群集内的主代理。如果主代理处于脱机状态,则将无法在整个群集内传播配置信息,因为其他代理无法访问配置更改记录。在这些情况下,如果尝试创建、重新配置或销毁目标或长期订阅,或者尝试执行某个相关的操作(例如,重新激活长期订阅),将发生异常。(但是,非管理消息传送仍然可以正常进行。) 主代理和配置更改记录的使用是可选的。只有当群集配置发生更改或代理失败之后群集的同步非常重要时,才有必要使用它们。



上一页      目录      索引      下一页     


文件号码:819-3565。  版权所有 © 2005 Sun Microsystems, Inc. 保留所有权利。