JMS的可靠性機制

確認:

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


在事務性會話中,當一個事務被提交的時候,確認自動發生。在非事務性會話中, 消息何時被確認取決於創建會話時的應答模式 (acknowledgement mode) 。

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

1.Session.AUTO_ACKNOWLEDGE。當客戶成功的從 receive 方法返回的時候,或者從 MessageListener.onMessage 方法成功返回的時候, 會話自動確認客戶收到的消息。

2.Session.CLIENT_ACKNOWLEDGE。 客戶通過消息的 acknowledge 方法確認消息。需要注意的是,在這種模式中,確認是在會話層上進行:確認一個被消費的消息將自動確

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

3.Session.DUPS_ACKNOWLEDGE。該選擇只是會話遲鈍的確認消息的提交。如果 JMS provider 失敗,那麼可能會導致一些重複的消息。如果是重複的消息,那麼 JMS

provider 必須把消息頭的 JMSRedelivered 字段設置爲true。


持久性:

JMS 支持以下兩種消息提交模式:

1.PERSISTENT。指示 JMS provider 持久保存消息,以保證消息不會因爲 JMS provider 的失敗而丟失。

2.NON_PERSISTENT。不要求 JMS provider 持久保存消息。


 優先級:

可以使用消息優先級來指示 JMS provider 首先提交緊急的消息。優先級分 10個級別,從 0(最低)到 9(最高)。如果不指定優先級,默認級別是 4。需要注意的是,JMS

provider 並不一定保證按照優先級的順序提交消息。


消息過期:

可以設置消息在一定時間後過期,默認是永不過期。


臨時目的地:

可以通過會話上的 createTemporaryQueue 方法和 createTemporaryTopic 方法來創建臨時目的地。它們的存在時間只限於創建它們的連接所保持的時間。

只有創建該臨時目的地的連接上的消息消費者才能夠從臨時目的地中提取消息。


持久訂閱:

首先消息生產者必須使用 PERSISTENT 提交消息。客戶可以通過會話上的createDurableSubscriber 方法來創建一個持久訂閱,該方法的第一個參數必須是一個 topic。第二個

參數是訂閱的名稱。

JMS provider 會存儲發佈到持久訂閱對應的 topic 上的消息。如果最初創建持久訂閱的客戶或者任何其它客戶使用相同的連接工廠和連接的客戶 ID、相同的主題和相同的訂閱名

再次調用會話上的 createDurableSubscriber 方法, 那麼該持久訂閱就會被激活。JMS provider 會向客戶發送客戶處於非激活狀態時所發佈的消息。

持久訂閱在某個時刻只能有一個激活的訂閱者。持久訂閱在創建之後會一直保留,直到應用程序調用會話上的 unsubscribe 方法。


本地事務:

在一個 JMS 客戶端, 可以使用本地事務來組合消息的發送和接收。 JMS Session接口提供了 commit 和 rollback 方法。事務提交意味着生產的所有消息被髮送,消費的所有消

息被確認;事務回滾意味着生產的所有消 息被銷燬,消費的所有消息被恢復並重新提交,除非它們已經過期。


事務性的會話總是牽涉到事務處理中,commit 或 rollback 方法一旦被調用,一個事務就結束了,而另一個事務被開始。關閉事務性會話將回滾其中的事務。


需要注意的是,消息的生產和消費不能包含在同一事務中。






發佈了43 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章