ActiveMQ从入门到精通(二)之可靠性机制

                                            ActiveMQ的可靠性机制

  • 原因( 确认JMS消息)

            只要消息被确认以后,才认为消息被成功消费了。消息的成功消费包括三个阶段:客户端接收消息、客户端处理消息以及客户端确认消息。在事务性会话中,当一个事务被提交的时候,确认自动发生。在非事务性会话中,消息什么时候被确认取决于建立会话时的应答模式(acknowledgement mode)。该参数有如下三个可选值:java

  1. Session.AUTO_ACKNOWDLEDGE

         当消费者成功的从receive方法返回的时候,或者从MessageListener.onMessage监听方法成功返回的时候,会话自动确认消费者收到的消息。可是注意的是,这种方式消费者端不必定是向服务器端一条一条的确认消息。服务器

        代码:session

// 经过Connection对象建立Session会话(上下文环境对象),
// 参数一,表示是否开启事务
// 参数二,表示的是签收模式,通常使用的有自动签收和客户端本身确认签收
Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);

​​​​​​​    2.Session.CLIENT_ACKNOWLEDGE​​​​​​​ide

        客户经过消息的acknowledge方法确认消息。须要注意的是,在这种模式中,确认是在会话层上进行:确认一个被消费的消息将自动确认全部已被会话消费的消息。例如,若是一个消息消费者消费了10个消息,而后确认第5个消息,那么全部10个消息都被确认。spa

        代码:code

// 使用Session来建立消息对象的生产者或者消费者
MessageConsumer createConsumer = session.createConsumer(destination);
while (true) {
TextMessage textMessage = (TextMessage) createConsumer.receive();
if (textMessage == null)
break;
// 客户端的签收模式,
textMessage.acknowledge();
System.out.println("收到的内容为" + textMessage.getText());
}

    3.Session.DUPS_OK_ACKNOWLEDGE​​​​​​​对象

        批量确认方式。消费者端会按照必定的策略向服务器端间隔发送一个ack标示,表示某一批消息已经处理完成。若是JMS Provider失败,那么可能会致使一些重复的消息。若是是重复的消息,那么JMS Provider必须把消息头的JMSRedelivered字段设置为true。事务

        代码:get

​​​​​​​

相关文章
相关标签/搜索