与队列目标分摊工作负载
如果将服务器集群添加至服务集成总线并且将一个或多个消息传递引擎部署至集群,那么可配置集群总线成员以获取可伸缩性。集群总线成员中的消息传递引擎分摊与部署至集群的队列目标相关联的消息传递工作负载。
有关配置消息传递引擎以分摊工作负载的更多信息,请参阅服务集成高可用性和工作负载共享配置。
- 如果集群中只有一个消息传递引擎,那么该目标将由此消息传递引擎执行本地化操作。该目标不会分区。
- 如果集群中有多个消息传递引擎,那么该目标在集群中的所有消息传递引擎间分区。每个消息传递引擎处理该目标控制的消息子集。
将消息发送至分区队列目标
通常,如果单个服务器不能负担队列的消息处理负载,那么应创建可伸缩集群总线成员并对队列目标进行分区。为提高使用效率,对于每个分区,分区队列要求多个使用者中至少一个使用者使用该分区中的消息。 典型的使用是消息驱动的 Bean (MDB) 的集群。有关 MDB 如何使用集群目标中消息的详细信息,请参阅如何在集群中连接消息驱动的 Bean。
- 生产应用程序连接至主管队列目标的集群总线成员的消息传递引擎时消息传递系统的缺省行为
缺省情况下,生产应用程序首选将其所有消息发送至本地队列点。此行为通过将消息到达队列点时需要经过的距离缩至最短来使消息传送性能达到最佳。
图 1. 缺省行为:消息发送至本地队列点如果本地队列点不可用,那么会按不存在本地队列点来处理这些消息。如果存在以下情况,那么队列点对新消息不可用:- 拥有队列点的消息传递引擎不可用(例如,消息传递引擎已停止)。
- 队列点达到其消息阈值上限。
- 已对队列点禁用将消息发送至该队列点的功能。
- 生产应用程序连接至未主管队列目标的总线成员的消息传递引擎时消息传递系统的缺省行为
缺省情况下,消息传递系统在可用队列点之间分摊消息工作负载。
在此图中,生产应用程序连接至未主管队列目标的总线成员的消息传递引擎,此消息传递引擎的消息工作负载在可用队列点间分摊。
图 2. 缺省行为:在所有队列点之间分摊消息工作负载
- 生产应用程序连接至主管队列目标的总线成员的消息传递引擎时的可配置行为
如果希望在队列目标的所有队列点间分摊来自生产应用程序的消息工作负载(即使在连接至带有队列点的消息传递引擎时),请考虑对消息生产者禁用缺省首选本地队列点配置选项。此选项可用于 JMS 消息生产者和来自使用 WebSphere® Application Server V7.0 或更高版本 的外部总线连接的入站消息。
在此图中,生产应用程序连接至主管队列目标的总线成员的消息传递引擎。生产应用程序已禁用“首选本地队列点”选项。其消息工作负载在所有队列点间分摊。
图 3. 禁用“首选本地队列点”:在所有队列点间分摊消息工作负载但是,如果若干生产应用程序的连接工作负载在总线成员内所有消息传递引擎间分摊,请考虑保留缺省首选本地队列点行为以维护性能。这是因为缺省行为:- 来自所有生产应用程序的消息工作负载在所有队列点间分摊
- 将来自已连接消息传递引擎的消息发送至同一集群总线成员中的另一消息传递引擎的需求降至最低
- 生产应用程序连接至未主管队列目标的集群总线成员的消息传递引擎时的可配置行为
如果要将在应用程序生产者的单个会话期间生成的所有消息发送至同一队列点,那么可配置消息亲缘关系。这些消息工作负载就不会在多个队列点之间分摊。
如果要将消息集发送至同一队列点以便使用者的单个实例按顺序处理消息,请考虑为应用程序配置消息亲缘关系。系统根据该应用程序生产者的首选本地队列点配置选项来选择所有消息将发送至的单个队列点。此选项可用于 JMS 消息生产者和来自使用 WebSphere Application Server V7.0 或更高版本 的外部总线连接的入站消息。
在此图中,生产应用程序连接至未主管队列目标的总线成员的消息传递引擎。已对生产应用程序配置消息亲缘关系。所有消息发送至一个队列点。
图 4. 消息亲缘关系:生成的所有消息发送至同一队列点。如果所选队列点变为不可用,那么通过此应用程序发送的任何其他消息将会排队以便传送至所选队列点或者发送操作被拒绝。此行为对应于将消息发送至带有单个队列点的队列目标。
使用分区队列目标中的消息
当创建使用者会话时,将使用者绑定至目标的一个分区。如果使用者连接至具有目标本地分区的消息传递引擎,那么该使用者绑定至该分区。如果该使用者连接至没有目标分区的消息传递引擎,那么该使用者绑定至工作负载管理器动态选择的另一消息传递引擎中的分区。一旦绑定,使用者将只接收来自绑定的分区的消息。缺省情况下,如果使用者绑定的分区没有任何消息,那么即使备用分区包含消息,该使用者也不会接收来自备用分区的消息。
如果在没有本地使用者的集群中配置分区目标,那么使目标的每个分区至少有一个使用者很重要,这样可确保所有消息被使用。可通过将各个使用者作为目标连接至具有队列点的特定消息传递引擎来实现此目标。MDB 是特定类型的消息使用者。有关使用分区目标中的消息时 MDB 行为的详细信息,请参阅如何在集群中连接消息驱动的 Bean。
如果希望使用者从目标的所有可用队列点接收消息,那么可配置消息使用者。
如果存在大量小型消息,并且 MDB 仅处理少量消息,那么可按本主题中所述,将工作负载均衡的消息传递引擎与分区队列配合使用。但是,如果消息数目较少而 MDB 处理大部分消息,那么可能只需要一个消息传递引擎,但您需要将 MDB 部署至尽可能多的服务器,不管这些服务器是否具有消息传递引擎都是如此,即使这些服务器并非属于同一单元。 典型情况是 MDB 更新用户数据库时。有关在多个服务器间配置 MDB 部署的详细信息,请参阅为缺省消息传递提供程序配置 MDB 调速。
- 使用者使用分区目标中的消息时消息传递系统的缺省行为
创建使用应用程序的会话后,该会话会与队列目标的某个队列点相关联。如果该队列目标具有多个队列点,那么系统会选择一个队列点。缺省情况下,消息传递系统首选将使用者与已连接消息传递引擎上的本地队列点相关联。如果已连接消息传递引擎上没有可用本地队列点,那么系统会使用 WebSphere Application Server 工作负载管理器(其使用权重循环法算法)选择另一队列。
缺省行为尝试通过将对使用者可用的消息限制为使用者的关联队列点上的消息,以使队列点中的消息使用的性能达到最佳。使用者不能使用其他队列点中的消息,即使其关联队列点没有消息但其他队列点有消息也是如此。
在此图中,使用应用程序连接至没有本地队列点的消息传递引擎。仅使用一个关联队列点中的消息。
图 5. 缺省行为:仅使用关联队列点中的消息
- 使用者使用分区目标中的消息时消息传递系统的可配置行为
可配置消息使用者,以便其关联队列点从目标的所有可用队列点收集消息并使它们对使用者可视。
如果希望使用者将分区队列视为未分区队列,请考虑配置消息收集。但是,从多个队列点收集消息明显比使用单个队列点中的消息慢。所以,如果可能,应将目标重新配置为具有单个队列点,或使用别名目的地将消息生产者和使用者范围限制为单个队列点。如果您需要多个队列点的可伸缩性并且性能很重要,应考虑收集消息的备用解决方案。
在操作的消息收集方式下,使用者可能见不到消息包含在队列点上时的顺序。因此,消息顺序未被保留。
此选项对 JMS 消息生产者和来自使用 WebSphere Application Server V7.0 或更高版本 的外部总线连接的入站消息可用。
在此图中,使用应用程序连接至没有本地队列点的消息传递引擎。已对使用应用程序启用消息收集。关联队列点从目标的所有可用队列点收集消息并使它们对使用者可用。
图 6. 消息收集:使用来自所有队列点的消息