1.消息接收确认:
JMS消息只有在被确认之后,才认为已经被成功地消费了,
消息的成功消费通常有三个阶段:
(a)客户接收消息
(b)客户处理消息
©消息被确认
前面的代码中,可以看到:Boolean.TRUE—>表示开启一个事务
而Session.AUTO_ACKNOWLEDGE参数表示自动的提交事务.
当然session.commit()也会触发事务提交
2. 在一个事务性质的会话中,当一个事务被提交的时候,确认自动发生.
也就是说在最后会默认提交
3. 而在一个非事务性的会话中,消息何时被确认,取决于创建会话时指定的应答模式.
应答模式有以下几种(应答模式应该是在Boolean.FALSE)的情况下进行:
Session.AUTO_ACKNOWLEDGE: 当客户成功的从receive方法返回的时候,或者从MessageListener.onMessage(消息监听器)方法成功返回的时候,此时会话自动确认消息被消费方消费。
如果没有调用session.commit()方法,那么消息的消费方可以一直读取消息服务方传递的消息.
当调用了该方法后,那么消息的消费方只能获取到一次消息.
Session.CLIENT_ACKNOWLEDGE:消息的消费者通过调用消息的acknowledge方法确认消息。在这种模式下,会把这个会话中的所有的消息都进行确认.
比如说你在获取第8个消息的时候,调用了message.acknowledge()方法,那么此时不仅仅是只确认这一条消息,而是会把之前的7条没有确认的消息都会进行确认.
Session.DUPS_OK_ACKNOWLEDGE 不必必须签收,消息可能会重复发送。在第二次重新传递消息的时候,消息头的JmsDelivered会被置为true标示当前消息已经传送过一次,客户端需要进行消息的重复处理控制