跳到主要内容

在PubSub+ JCSMP API中的事务中消费消息

要以事务方式消费保证消息,客户端必须通过以下列出的方法或函数之一在事务会话中创建一个消费者流,以绑定到消息存储到的目标端点。

然后可以通过消费者流从目标端点接收保证消息,方式如下:

  • 异步地,通过定义的监听器,称为 XMLMessageListener
  • 同步地,通过单独的接收调用。同步消费事务中消息所需的调用如下。

事务会话中的消费者与非事务会话中的消费者功能相同,只是它们接收的消息仅在事务会话成功提交时才被确认,随后从事件代理中移除。例如,调用 XMLMessage.ackMessage() 对事务会话无效。有关如何同步或异步接收保证消息的信息,请参阅在 PubSub+ JCSMP API 中接收保证消息。

对于 JCSMP,默认情况下,创建消费者流时,它处于停止状态(即,直到客户端应用程序调用 start() 之前,不会接收任何消息)。

要创建事务会话中的消费者流,请使用 TransactedSession.createFlow(...) 获取 FlowReceiver 实例。

要同步消费事务中的消息,请使用:

  • receive() — 接收下一个可用消息,并等待消息可用。
  • receive(int timeoutInMillis) — 接收下一个可用消息。如果没有消息可用,该方法将等待设置的时间量到期。
  • receiveNoWait() — 接收下一个可用消息。如果没有消息可用,此方法将立即返回 null

在事务中的消息被消费后但在提交之前,发生以下情况时,这些消息仍然可以成功提交:

  • 消息被管理操作从事件代理中移除(即,消息从存储中删除)。
  • 消息的 TTL 已过期。(注意,无论过期的消息是否被移至死信队列(DMQ),提交都会成功。)