总线目标的严格消息排序

如果在所有情况下都必须维护消息顺序,那么可以对目标进行配置,以便比正常目标更严格地维护消息顺序。

通常,单个目标的单个生产者生成的消息将被该目标的使用者以这些消息的生成顺序看到。但是,某些拓扑和事件(例如系统故障)可能会更改消息的顺序(请参阅消息排序以了解详细信息)。如果严格的消息顺序十分关键,那么可以对目标进行配置,以便以更严格的方式保留消息顺序。您应该通过进行严格的消息排序并使用受限制的拓扑(如本节后续部分所述)来在所有情况下维护消息顺序。

自动实施的限制

当系统包含严格排序的目标时,在运行时就会自动实施某些限制。这些限制将会影响应用程序与目标的交互方式以确保严格的消息顺序,因此,在将目标配置为完全地进行排序前,您必须确保充分了解下列每一项限制。
  1. 并发使用者无法连接到已排序的目标。让多个使用者使用一个目标中的消息会导致使用消息的顺序不正确。因此,对于已排序的队列目标以及已排序的主题空间的任何预订来说,在任何时候最多只能连接一个使用者。这等同于对队列目标将“独占接收”设置为 true 以及对 JMS 主题连接工厂将“共享持久预订”设置为“从不共享”,并且在系统日志中将生成警告以指示这些选项是否已被覆盖。还会将连接的使用者限制为每次只能运行单个事务。对于许多消息传递接口(例如 JMS)来说,这是正常的行为,因此应该不会影响到多数用户。
  2. 部分使用的消息会导致后续消息无法被使用。对于标准目标(即,未启用严格消息排序选项的目标)来说,使用者可能会跳过目标中已被部分使用的消息(例如,在尚未落实的事务中接收的消息),从而允许消息处理工作跳过先前已被使用但尚未落实的消息并继续。这将打乱消息顺序。对于已排序的目标来说,使用者不会跳过这样的消息,而是,该使用者将被阻塞到该消息被完全移除(例如,未落实的事务被落实)或替换(例如,未落实的事务被回滚)为止。如果先前连接的使用者无法落实已用来使用目标中的消息的事务,或者事务资源在事务落实期间变为暂时不可用,就会发生这种情况。如果该资源永久不可用,那么请参阅解决不确定事务以了解有关处理这些事务的信息。
  3. 对已排序目标的并发消息驱动的 Bean (MDB) 进行了限制。对于任何部署在已排序的目标上的 MDB 来说,最大并发端点数设置和最大批处理大小设置都被覆盖为 1。有关更多信息,请参阅JMS 激活规范 [设置]。这将确保该 MDB 按顺序处理消息。当系统在运行时覆盖此属性时,在系统日志中将生成警告。
  4. 对已排序目标上的并发调解进行了限制。在已排序的目标上,任何调解的“允许并发调解”设置都被覆盖为 false。有关更多信息,请参阅并发调解。这将确保该调解按顺序处理消息。当系统在运行时覆盖此属性时,在系统日志中将生成警告。
  5. 如果启用了消息失败重复发生时自动停止端点,那么连续失败消息阈值改写为 1。
  6. 对现有主题目标启用“保持严格消息顺序”的影响。如果对现有主题目标启用了严格消息排序,那么任何现有持久预订以及关联的消息都将变为无效。当已启用严格的消息排序并重新启动环境时,将删除现有持久预订并重新创建这些持久预订;同时将删除与持久预订相关联的消息。

其他可能影响消息排序的限制

即使在目标上启用严格的消息顺序,也不会自动实施下列限制,但它们会影响消息排序,因此您应该了解它们:
  • 如果对一个目标配置了异常目标,在发生错误情况(例如消息达到其最大失败传递限制)时,可能会将应该发送到该目标的消息传递到该异常目标。这种消息重定向操作可能被看作更改了消息顺序,在这种情况下,该目标应该将异常目标设置为“无”。请注意,如果将异常目标设置为“无”,就会导致应该被发送到异常目标的消息留在该目标中。
  • 更改服务集成总线的拓扑会影响消息顺序。例如,如果删除已排序的目标并重新创建它,就会将该目标看作两个不同的目标,因此无法保证这两个目标的顺序相同。
  • 添加或移除调解会影响消息顺序。当消息正在流向一个目标或者流经该目标时,如果对该目标添加或移除调解,就不一定会保留消息顺序。
  • 可以将调解设计成故意地影响消息顺序,因此,更改调解会直接影响消息顺序。例如,可以添加对消息进行重新排序或者将消息路由至不同目标的调解。
  • 别名目标和外部目标没有用于维护严格消息顺序的选项。在这两种目标中,只能对底层目标进行排序。
  • 如果将队列目标部署到带有多个消息传递引擎的集群总线成员(这意味着该目标有多个队列点或调解点),那么无法在该目标维护消息顺序。因此,在此类目标上启用严格消息顺序并不能确保消息顺序。 配置消息亲缘关系允许将消息集发送至同一队列点以便由单个使用者按顺序处理。消息亲缘关系会影响性能,原因是消息工作负载不会在多个队列点之间分摊。
    要点: 系统并不禁止使用分区目标。但是,您必须负责不要在系统中使用分区目标。
  • 在某些情况下,具有除“保证持久性”以外的可靠性的消息可能会丢失或重复。有关更多信息,请参阅消息可靠性级别 - JMS 传送方式及服务集成服务质量。如果将这种情况视为打乱了消息顺序,那么只应该让严格排序的目标使用“保证持久性”消息。
  • 消息优先级可以确保消息顺序,您应该将这种情况理解为优先级较高的消息可以越过优先级较低的消息。
  • 消息可靠性可以确保消息顺序,您应该将这种情况理解为具有一种可靠性的消息可以越过具有另一种可靠性的消息。
  • 虽然不允许多个使用者连接到一个已排序的目标,但可以使用多个生产者来将消息发送到多个已排序的目标。由于消息在目标上是按照发送事务的落实顺序出现的,所以,无法跨多个生产者确保消息顺序。
  • 应用程序代码可能包含将会打乱消息顺序的逻辑。

指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjo_message_order_
文件名:cjo_message_order_.html