跳到主要内容

在事务中消费消息

要以事务方式消费消息,客户端必须从事务会话中获取一个MessageConsumerTopicSubscriber

在获取了MessageConsumerTopicSubscriber之后,消息可以通过以下方式接收:

  • 异步地,通过定义的MessageListener
  • 同步地,通过单独的receive(...)调用

事务会话中的消费者与非事务会话中的消费者功能相同,只是它们接收到的消息只有在事务会话成功提交时才会被确认,并随后从事件代理中移除。例如,调用Message.acknowledge()对事务会话没有影响。有关如何通过MessageConsumer同步或异步接收保证消息的信息,请参阅同步接收消息或异步接收消息。

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

  • 消息通过管理操作从事件代理中移除(即,消息从spool中删除)。
  • 消息的TTL设置的时间已过期。无论过期消息是否被移动到死信队列(DMQ),提交都会成功。