消息确认
每个非事务性会话都有一种确认模式,用于确定如何确认应用程序收到的消息。 共有三种确认模式可用,确认模式的选择会影响应用程序的设计。
仅当应用程序连接到 IBM® MQ 队列管理器或 WebSphere® Application Server 服务集成总线时,本主题中的信息才相关。 这些信息不适用于与代理程序的实时连接。
XMS 使用相同的机制来确认收到 JMS 使用的消息。
如果会话为非事务性,那么确认应用程序收到的消息的方法取决于该会话的确认模式。 以下段落描述了这三种确认模式:
- XMSC_AUTO_ACKNOWLEDGE
- 会话自动确认应用程序收到的每个消息。
如果消息同步发送到应用程序,会话会在每次 Receive 调用成功完成时确认收到消息。
如果应用程序成功收到消息,但存在故障阻止进行确认,那么该消息将变为可重新发送。 因此,应用程序必须能够处理重新传递的消息。
- XMSC_DUPS_OK_ACKNOWLEDGE
- 会话在进行选择时确认应用程序收到消息。
使用此确认模式可减少会话必须执行的工作量,但是阻止消息确认的故障可能会导致多个消息变为可重新发送。 因此,应用程序必须能够处理重新传递的消息。
- XMSC_CLIENT_ACKNOWLEDGE
- 应用程序通过调用 Message 类的 Acknowledge 方法来确认它所收到的消息。
应用程序可以单独地确认收到每个消息,或者可以接收一批消息并只为收到的最后一条消息调用 Acknowledge 方法。 如果调用 Acknowledge 方法,自上次调用此方法以来收到的所有消息都将得到确认。
与以上任一确认模式配合使用,应用程序可以通过调用 Session 类的 Recover 方法停止并重新启动会话中的消息发送。 将重新传递先前未确认接收的消息。 但是,这些消息的发送顺序可能会与之前的发送顺序不同。 在此期间,优先级较高的消息可能已到达,而某些原始消息可能已到期。 在点到点域中,某些原始消息可以已被另一个应用程序使用。
应用程序可以通过检查消息的 JMSRedelivered 头字段的内容来确定消息是否会重新发送。 应用程序通过调用 Message 类的 Get JMSRedelivered 方法来实现此目标。