[jms那點事兒] JMS 消息傳送模式、消息簽收以及spring jmsTemplate配置

Activemq支持兩種消息傳送模式:PERSISTENT (持久消息)和 NON_PERSISTENT(非持久消息)

從字面意思就可以瞭解,這是兩種正好相反的模式。

1、PERSISTENT 持久消息

是activemq默認的傳送方式,此方式下的消息在配合activemq.xml中配置的消息存儲方式,會被存儲在特定的地方,直到有消費者將消息消費或者消息過期進入DLQ隊列,消息生命週期纔會結束。

此模式下可以保證消息只會被成功傳送一次和成功使用一次,消息具有可靠性。在消息傳遞到目標消費者,在消費者沒有成功應答前,消息不會丟失。所以很自然的,需要一個地方來持久性存儲。

如果消息消費者在進行消費過程發生失敗,則消息會被再次投遞。

 

2、NON_PERSISTENT 非持久消息

非持久的消息適用於不重要的,可以接受消息丟失的哪一類消息,這種消息只會被投遞一次,消息不會在持久性存儲中存儲,也不會保證消息丟失後的重新投遞。

 

在spring提供的JmsTemplate中,同樣提供了針對於當前功能的配置選項:

 

 消息的簽收模式:

客戶端成功接收一條消息的標誌是一條消息被簽收,成功應答。

消息的簽收情形分兩種:

1、帶事務的session

 如果session帶有事務,並且事務成功提交,則消息被自動簽收。如果事務回滾,則消息會被再次傳送。

2、不帶事務的session

 不帶事務的session的簽收方式,取決於session的配置。

Activemq支持一下三種模式:

  Session.AUTO_ACKNOWLEDGE  消息自動簽收
  Session.CLIENT_ACKNOWLEDGE  客戶端調用acknowledge方法手動簽收
  Session.DUPS_OK_ACKNOWLEDGE 不必必須簽收,消息可能會重複發送。在第二次重新傳遞消息的時候,消息頭的JmsDelivered會被置爲true標示當前消息已經傳送過一次,客戶端需要進行消息的重複處理控制。

spring提供的JmsTemplate中的配置方式:

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