ActiveMQ JMS的可靠性機制

2021-09-20 12:58:55 字數 2207 閱讀 4700

預設情況下,生產者傳送的訊息是持久化的。訊息傳送到broker以後,producer會等待broker對這條訊息的處理情況的反饋。可以設定訊息傳送端傳送持久化訊息的非同步方式

connectionfactory

.setuseasyncsend(true

);

回執視窗大小設定

connectionfactory

.setproducerwindowsize();

非持久化訊息

textmessage

.setjmsdeliverymode(de

liverymode.non_persistence

);

非持久化訊息模式下,預設就是非同步傳送過程,如果需要對非持久化訊息的每次傳送的訊息都獲得broker的回執的話

connectionfactory.setalwayssyncsend();

預設情況下,mq伺服器(broker)採用非同步方式向客戶端主動推送訊息(push)。也就是說broker在向某個消費者會話推送訊息後,不會等待消費者響應訊息,直到消費者處理完訊息以後,主動向broker返回處理結果。

broker端一旦有訊息,就主動按照預設設定的規則推送給當前活動的消費者。 每次推送都有一定的數量限制,而這個數量就是prefetchsize。假如prefetchsize=0 . 此時對於consumer來說,就是乙個pull模式。

jms訊息只有在被確認之後,才認為已經被成功地消費了。訊息的成功消費通常包含三個階段:客戶接收訊息、客戶處理訊息和訊息被確認。

事務相關

1、在事務性會話中,當乙個事務被提交的時候,確認自動發生。

final session session = connection.createsession(boolean.true, session.auto_acknowledge);

....

session.commit();

2、在非事務性會話中,訊息何時被確認取決於建立會話時的應答模式(acknowledgement mode)。

該引數有以下三個可選值:

session.auto_acknowledge:

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

final session session = connection.createsession(boolean.false, session.auto_acknowledge);

...mapmessage message = (mapmessage) consumer.receive();

session.client_acknowledge:

客戶通過呼叫訊息的acknowledge方法確認訊息。

需要注意的是,在這種模式中,確認是在會話層上進行,確認乙個被消費的訊息將自動確認所有已被會話消費的訊息。例如,如果乙個訊息消費者消費了10個訊息,然後確認第5個訊息,那麼所有10個訊息都被確認。

final session session = connection.createsession(boolean.false, session.client_acknowledge);

...while(i<3)

session.dups_ok_acknowledge:

該選擇只是會話遲鈍的確認訊息的提交。如果jmsprovider失敗,那麼可能會導致一些重複的訊息。 如果是重複的訊息,那麼jmsprovider必須把訊息頭的jmsredelivered欄位設定為true

在乙個jms客戶端,可以使用本地事務來組合訊息的傳送和接收。jms session 介面提供了commit和rollback方法。

jms provider會快取每個生產者當前生產的所有訊息,直到commit或者rollback,commit操作將會導致事務中所有的訊息被持久儲存;rollback意味著jms provider將會清除此事務下所有的訊息記錄。在事務未提交之前,訊息是不會被持久化儲存的,也不會被消費者消費。事務提交意味著生產的所有訊息都被傳送。消費的所有訊息都被確認;事務回滾意味著生產的所有訊息被銷毀,消費的所有訊息被恢復,也就是下次仍然能夠接收到傳送端的訊息,除非訊息已經過期了。

可靠性測試學習 可靠性測試理解

最近測試可靠性,參考了業界的一些思維,有些想法和建議 先說說軟體可靠性的定義,根據我測試的體會和思考,我覺得軟體的可靠性就是軟體系統發生故障後自動恢復或者人工干預使其能恢復到正常狀態的能力 業界的測試有些把容錯測試和可靠性測試搞混淆,其實兩者不一樣,容錯測試是通過模擬一些可能發生的已知的異常操作而檢...

產品可靠性

產品可靠性 影響產品可靠性的三個方面 1.電應力 2.機械應力 3.環境應力。下面從上述三個方面展開講述。應力 專案 內容 備註電應力 物料 1.pcb 商 2.pcb抽檢 3.元器件選型 元器件選型指導書 4.採購渠道 商資質a b c類 5.儲存 msl 6.領料 原理設計 1.電路方案 2.電...

軟體可靠性

1983年美國ieee計算機學會對 軟體可靠性 作出了明確定義,此後該定義被美國標準化研究所接受為國家標準,1989年我國也接受該定義為國家標準。該定義包括兩方面的含義 1 在規定的條件下,在規定的時間內,軟體不引起系統失效的概率 2 在規定的時間週期內,在所述條件下程式執行所要求的功能的能力 其中...