消息可靠性级别 - JMS 传送方式及服务集成服务质量
消息具有服务质量属性,您可以使用此属性来指定消息传递可靠性。JMS 应用程序使用 JMS 传送方式(持久或非持久)发送消息,然后服务集成使用 JMS 连接工厂设置将 JMS 传送方式映射至服务集成消息可靠性设置。总线目标(包括外部目标和别名目标)上的其他设置可覆盖此消息可靠性。
- 服务质量 (QoS)(服务集成消息传递)
- 传送方式 (JMS)
- 持久性 (IBM MQ )
- 最大努力非持久
- 当消息传递引擎停止或发生故障时,将废弃消息。如果用于发送消息的连接变为不可用或者系统资源不足,也可能会废弃消息。
- 快速非持久
- 当消息传递引擎停止或发生故障时,将废弃消息。如果用于发送消息的连接变为不可用,也可能会废弃消息。
- 可靠非持久
- 当消息传递引擎停止或发生故障时,将废弃消息。
- 可靠持久
- 当消息传递引擎发生故障时,可能会废弃消息。
- 有保证的持久
- 不废弃消息。
JMS 应用程序使用 JMS 传送方式(持久或非持久)发送消息。应用程序将此传送方式指定为 JMS send() 方法的参数,但可选择以 JMS 目标属性的形式指定一种传送方式来覆盖 send() 方法。
服务集成使用 JMS 连接工厂设置将 JMS 传递方式(持久和非持久)映射至服务集成消息可靠性级别。您可以使用此映射在高性能、高可靠性或两者之间进行选择。可以在 JMS 连接工厂设置中指定所需要的映射。要获得示例,请参阅缺省消息传递提供程序统一连接工厂 [设置]。
将缺省和最大服务集成可靠性级别指定为总线目标(包括外部目标和别名目标)的属性。还可指定生产者指定的可靠性是否覆盖目标的缺省可靠性:如果不覆盖,那么服务集成将消息的可靠性级别重设为目标的缺省可靠性。对于别名目标,可指定从期望目标继承可靠性设置。
要与 IBM MQ 互操作,应将服务集成消息的可靠性设置映射至 IBM MQ 消息的持久性设置。有关更多信息,请参阅在 JMS 传送选项和消息可靠性与 IBM MQ 持久性值之间进行映射。
最大努力非持久 | 快速非持久 | 可靠非持久 | 可靠持久 | 有保证的持久 | |
---|---|---|---|---|---|
JMS 传送方式: | 非持久 | 非持久 | 非持久 | 持久 | 持久 |
事务性核心: | 否,可废弃各个消息 | 是:消息不会被废弃,并且服务器重新启动后不会保留下来 | 是:消息不会被废弃,并且服务器重新启动后不会保留下来 | 是 | 是 |
消息被固化: | 否 | 可能:消息在目标上积压时 | 可能:消息在目标上积压时 | 是:异步方式 | 是:同步方式 |
消息在正常操作中被废弃: | 是 | 否 | 否 | 否 | 否 |
消息被复制: | 否 | 可能:状态数据在服务器发生故障时可能会丢失,从而导致进行复制 | 可能:状态数据在服务器发生故障时可能会丢失,从而导致进行复制 | 可能:从数据库中删除数据的操作与用户请求异步进行 | 否 |
消息在计划内关闭时保留下来: | 否 | 否 | 否 | 是:固化消息被恢复,计划内关闭固化高速缓存的消息 | 是 |
消息在发生客户机通信故障时保留下来: | 否 | 否 | 是 | 是 | 是 |
消息在发生引擎通信故障时保留下来: | 否 | 是 | 是 | 是 | 是 |
消息在引擎崩溃时保留下来: | 否 | 否 | 否 | 可能;恢复固化消息 | 是 |
消息在备份和恢复时保留下来: | 否 | 否 | 否 | 可靠:可备份和恢复固化消息 | 是 |
- JMS 传送方式
- 对于诸如连接工厂和目标之类的 JMS 对象,这是指 JMS 传送方式与可靠性设置之间的映射。JMS 非持久传送方式的缺省映射是快速非持久。JMS 持久传送方式的缺省映射是可靠持久。
- 事务性核心
- 该消息相对于同一事务中生成或使用的其他消息是否是核心。生成最大努力消息时,这些消息相对于其他消息不是事务性核心。因此,如果丢失了一条这样的消息(有关在何种情况下可能会丢失消息的详细信息,请参阅本主题中前面对最大努力非持久的描述),那么落实事务时,可能仍然能够成功地传递同一事务中处理的其他消息(如果回滚该事务,那么将回滚对消息执行的所有操作,而不考虑这些操作的可靠性)。对于可靠性更高的消息,如果发生的故障导致事务中的其中一条消息丢失,那么将回滚该事务以及在该事务下执行的所有工作,从而使该操作成为事务性核心。
- 消息被固化
- 消息是被写至数据存储器还是文件存储器中的磁盘。将消息写入磁盘的频率会影响系统性能,通常,让消息传递引擎使用文件存储器可以提高性能。永远不会将最大努力非持久可靠性的消息写入磁盘;消息在目标上积压时,会将快速非持久和可靠非持久消息写入磁盘;始终会将可靠持久和保证持久性消息写入磁盘。
将可靠持久可靠性的消息写入磁盘,但此操作不是与生产应用程序同步执行的。这提高了调度和成批处理数据库更新方面的灵活性,有助于提高吞吐量。如果消息传递引擎在此异步写完成之前发生故障,那么可能会丢失消息,但正常操作情况下不会丢失消息。
以与生产应用程序同步的方式将保证持久性可靠性的消息写入磁盘。
如果因为使用消息的速度不及产生消息的速度而允许在目标上积压消息,那么消息传递引擎可能会选择将消息写入磁盘以管理内存使用情况。
其服务质量属性比最大努力非持久好的消息写入磁盘时,它还可能会高速缓存在内存缓冲区中。
- 消息在正常操作中被废弃:
- 在正常操作期间是否废弃消息。
- 注:如果您有非事务性消息驱动的 Bean,那么系统会在 Bean 启动或完成时删除消息。如果 Bean 生成异常,因而无法完成时,系统会采取以下某项操作:
- 如果系统配置为在 Bean 完成时删除消息,那么会将消息派遣到 Bean 的新实例,从而使消息有进行处理的其他机会。
- 如果系统配置为在 Bean 启动时删除消息,那么该消息会丢失。
如果服务质量设置为最大努力非持久,那么在 Bean 启动时删除消息。对于所有其他服务质量,在 Bean 完成时删除消息。
- 复制消息
- 在服务器发生故障后是否复制消息。
- 消息在计划内关闭时保留下来
- 在计划内关闭或启动后,消息是否保留下来。
- 消息在发生客户机通信故障时保留下来
- 在发生客户机消息传递引擎通信故障后,消息是否保留下来。
- 消息在发生引擎通信故障时保留下来
- 在发生引擎间通信故障后,消息是否保留下来。
- 消息在引擎崩溃时保留下来
- 在消息传递引擎或服务器发生故障后,消息是否保留下来。
- 消息在备份和恢复时保留下来
- 执行联机备份和恢复过程后,消息是否保留下来。