Sun Java System Application Server 9.1 部署规划指南

多代理群集

MQ Enterprise Edition 支持使用多个互连的代理实例(称为代理群集)。使用代理群集的情况下,客户机连接将分布在群集的所有代理中。群集可以提供水平可伸缩性并提高可用性。

单个消息代理可扩展到大约 8 个 CPU,并为典型的应用程序提供足够的吞吐量。如果代理进程失败,将会自动重新启动该进程。但是,随着连接到代理的客户机数以及传送的消息数的增加,代理最终将超过诸如文件描述符数量和内存容量之类的限制。

通过在群集中设置多个代理而不是一个代理,您可以:

不过,具有多个代理并不能确保正在处理事务的代理发生故障时,可以在备用代理上继续处理这些事务。虽然 MQ 将与群集中的其他代理重新恢复连接,但会中断事务消息传送并回滚正在进行的事务。这不会影响用户应用程序,但会影响无法完成的事务。由于可以继续使用这些连接,因此可确保服务的故障转移。

因此,MQ 在群集中不支持高可用性持久性消息传送。如果在出现故障后重新启动代理,它将自动恢复并完成持久性消息的传送。持久性消息可以存储在数据库或文件系统中。不过,如果承载代理的计算机不能从硬盘故障中恢复,则可能会丢失消息。

具有 Sun Cluster Data Service for Sun Message Queue 的 Solaris 平台支持透明的持久性消息故障转移。此配置利用 Sun Cluster 的全局文件系统和 IP 故障转移功能提供真正的高可用性,此配置包含在 Java Enterprise System 中。

主代理和客户机同步

在多代理配置中,将在群集的所有代理上复制每个目的地。每个代理知道为所有其他代理上的目的地注册的消息使用方。因此,每个代理可以将消息从其自己直接连接的消息生成方路由到远程消息使用方,然后将消息从远程生成方传送到其自己直接连接的使用方。

在群集配置中, 每个消息生成方直接连接的代理将路由该生成方发送给它的消息。因此,持久性消息是由消息的主代理存储和路由的。

每当管理员在代理上创建或销毁目的地时,此信息将会自动传播到群集中的所有其他代理。同样,每当在主代理中注册消息使用方时,或者使用方与其主代理断开连接时(显式断开、由于客户机或网络故障或其主代理出现故障),就会在整个群集中传播该使用方的相关信息。还会以类似方式将持久订阅的相关信息传播到群集中的所有代理。