ActiveMQ可靠性機制

2022-06-17 05:18:08 字數 1046 閱讀 3078

訊息的簽收(acknowledgment):

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

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

(1) 客戶端接收訊息

(2) 客戶端處理訊息

(3) 訊息被簽收

簽收可以由activemq發起,也可以由客戶端發起,取決於session簽收模式的設定。  

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

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

1.session.auto_acknowledge(自動確認模式)

當訊息成功的從receive方法返回時,或者從messagelistener介面的onmessage方法成功返回時,會話自動確認客戶端的訊息接收。

2.session.client_acknowledge(客戶端確認模式)

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

例如,如果乙個訊息消費者消費了10個訊息,然後確認第5個訊息,那麼所有10個訊息都會被確認。 

3. session.dups_ok_acknowledge(延時/批量確認模式)

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

這種方式會引起訊息的重複,但是降低了session的開銷,所以只有客戶端能容忍重複的訊息,才可使用。(如果activemq再次傳送同一訊息,那麼訊息頭中的jmsredelivered將被設定為true)

ActiveMQ訊息的可靠性機制

1.jms訊息確認機制 jms訊息只有在被確認之後,才認為已經被成功地消費了。訊息的成功消費通常包含三個階段 客戶接收訊息 客戶處理訊息和訊息被確認。在事務性會話中,當乙個事務被提交的時候,確認自動發生。在非事務性會話中,訊息何時被確認取決於建立會話時的應答模式 acknowledgement mo...

ActiveMQ訊息的可靠性

我們在activemq訊息持久化訂閱中,介紹了對topic模式下的訊息進行持久化訂閱,使其在暫無消費者消費或activemq服務重啟的情況下,不會導致訊息的丟失,這裡其實就是保證了一定程度的訊息可靠性。那麼還會在其他地方傳送訊息不可靠的情況麼,首先我們從訊息的生產及消費的流程中來看,訊息有生產者傳送...

ActiveMQ JMS的可靠性機制

預設情況下,生產者傳送的訊息是持久化的。訊息傳送到broker以後,producer會等待broker對這條訊息的處理情況的反饋。可以設定訊息傳送端傳送持久化訊息的非同步方式 connectionfactory setuseasyncsend true 回執視窗大小設定 connectionfact...