ActiveMQ可靠性機制


 

消息的簽收(Acknowledgment):

  客戶端成功接收一條消息的標志是這條消息被簽收。

  成功接收一條消息一般包括如下三個階段: 

    (1) 客戶端接收消息 

    (2) 客戶端處理消息  

    (3) 消息被簽收

    

  簽收可以由ActiveMQ發起,也可以由客戶端發起,取決於Session簽收模式的設置。  

  在帶事務的Session中,簽收自動發生在事務提交時。如果事務回滾,所有已經接收的消息將會被再次傳送。在不帶事務的Session中,一條消息何時和如何被簽收取決於Session的設置。

 

非事務會話可做如下設置:

1Session.AUTO_ACKNOWLEDGE(自動確認模式)

  當消息成功的從receive方法返回時,或者從MessageListener接口的onMessage方法成功返回時,會話自動確認客戶端的消息接收。

2Session.CLIENT_ACKNOWLEDGE(客戶端確認模式)

  客戶端通過調用消息的acknowledge方法簽收消息。在這種模式中,簽收是在會話層上進行:簽收一個已消費的消息會自動地簽收這個Session所有已消費消息的收條。

  例如,如果一個消息消費者消費了10個消息,然后確認第5個消息,那么所有10個消息都會被確認。 

3. Session.DUPS_OK_ACKNOWLEDGE(延時/批量確認模式)

  這種確認方式允許JMS不必急於確認收到的消息,允許在收到多個消息之后一次完成確認,Auto_AcKnowledge相比,這種確認方式在某些情況下可能更有效,因為沒有確認,當系統崩潰或者網絡出現故障的時候,消息可以被重新傳遞

  這種方式會引起消息的重復,但是降低了Session的開銷,所以只有客戶端能容忍重復的消息,才可使用。(如果ActiveMQ再次傳送同一消息,那么消息頭中的JMSRedelivered將被設置為true)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM