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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章