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

​​​​​​​

相關文章
相關標籤/搜索