activemq消息傳送模式和消息的簽收模式


轉載自:http://blog.csdn.net/quzishen/article/details/6131222

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

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

1、PERSISTENT 持久消息

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

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

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


2、NON_PERSISTENT 非持久消息

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

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

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
            <property name="connectionFactory" ref="cachingConnectionFactory"></property>  
            <property name="defaultDestination" ref="dest" />  
            <property name="messageConverter" ref="messageConverter" />  
            <property name="pubSubDomain" value="false" />  
            <property name="explicitQosEnabled" value="true" /> <!-- deliveryMode, priority, timeToLive 的開關,要生效,必須配置為true,默認false-->  
            <property name="deliveryMode" value="1" /> <!-- 發送模式  DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久-->  
        </bean>  

消息的簽收模式:

 

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

消息的簽收情形分兩種:

1、帶事務的session

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

2、不帶事務的session

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

Activemq支持一下三種模式:

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

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

<!-- PTP jms模板 -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="cachingConnectionFactory"></property>
		<property name="defaultDestination" ref="dest" />
		<property name="messageConverter" ref="messageConverter" />
		<property name="pubSubDomain" value="false" />
		<property name="sessionAcknowledgeMode" value="1" /> 
<!-- 消息應答方式
		Session.AUTO_ACKNOWLEDGE  消息自動簽收
		Session.CLIENT_ACKNOWLEDGE  客戶端調用acknowledge方法手動簽收
		Session.DUPS_OK_ACKNOWLEDGE 不必必須簽收,消息可能會重復發送
		-->
	</bean>

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM