本篇主要介绍JMS的消息确认机制。
JMS 消息只有在被确认之后,才认为已经被成功地消费了。消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。
对于事务性会话,当事务提交时,确认工作自动发生;在非事务会话中,消息的确认机制在会话创建时就应该指定,JMS中定义了三种确认方式:
1.Auto_ACKnowledge,自动确认模式,对于同步消费消息的,在成功调用过receive()方法之后,且无异常发生时,会话将自动对收到消息予以确认;对于异步消费消息的,在onMessage()方法成功调用后,且无异常发生时,会话即对收到的消息予以确认。
2.Client_ACKnowledge, 客户端自行确认模式,这种模式需要消息消费者显式的调用Message类的acknowledge()方法予以确认。
3.Dups_ACKnowledge,延时或批量通知模式,这种模式允许消息消费者不必急于确认收到的消息,允许在收到多个消息之后一次完成确认;这种方式有时可能更有效,因为在消息提供者崩溃的时候,如果消息没有确认,消息可以重新发送。
通过Connection创建Session时,如果指定为非事务性会话时,必须指定确认模式
Session session=connection.createSession(false,Session.Auto_ACKnowledge)//这里必须指定一个确认模式