1. 程式人生 > >Spring ActiveMQ 整合(二): 重發機制(訊息傳送失敗後的重新發送)

Spring ActiveMQ 整合(二): 重發機制(訊息傳送失敗後的重新發送)

       之前已經寫了一個spring   activemq整合的demo   ,今天繼續完善一下這個demo,讓功能更強大。

       假如現在我手裡有一個很重要的訊息的,想要發給一個人,但是很不幸,訊息傳送失敗了。這時候怎麼辦呢怎麼解決這種尷尬的情況,這時候我們可以利用activeMQ的  訊息重發機制(RedeliveryPolicy)  來解決這個煩人的問題。

訊息重發機制的實現:

1.寫RedeliveryPolicy配置檔案

      既然ctiveMQ提供了訊息重發機制(RedeliveryPolicy),那麼我們只需要在  的基礎上, 完善activemq的xml配置檔案即可。

	
<!-- 定義ReDelivery(重發機制)機制 ,重發時間間隔是100毫秒,最大重發次數是3次 http://www.kuqin.com/shuoit/20140419/339344.html -->
	<bean id="activeMQRedeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
		<!--是否在每次嘗試重新發送失敗後,增長這個等待時間 -->
		<property name="useExponentialBackOff" value="true"></property>
		<!--重發次數,預設為6次   這裡設定為1次 -->
		<property name="maximumRedeliveries" value="1"></property>
		<!--重發時間間隔,預設為1秒 -->
		<property name="initialRedeliveryDelay" value="1000"></property>
		<!--第一次失敗後重新發送之前等待500毫秒,第二次失敗再等待500 * 2毫秒,這裡的2就是value -->
		<property name="backOffMultiplier" value="2"></property>
		<!--最大傳送延遲,只在useExponentialBackOff為true時有效(V5.5),假設首次重連間隔為10ms,倍數為2,那麼第 
			二次重連時間間隔為 20ms,第三次重連時間間隔為40ms,當重連時間間隔大的最大重連時間間隔時,以後每次重連時間間隔都為最大重連時間間隔。 -->
		<property name="maximumRedeliveryDelay" value="1000"></property>
	</bean>

這一段配置就是訊息重發機制(RedeliveryPolicy)的實現,  每一行都有詳細的註釋。

2.引用RedeliveryPolicy的配置:

        <!--建立連線工廠 -->
	<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<property name="brokerURL" value="tcp://localhost:61616"></property>
		<property name="redeliveryPolicy" ref="activeMQRedeliveryPolicy" />  <!-- 引用重發機制 -->
	</bean>

在連結工廠裡面引入剛才配置好的RedeliveryPolicy

配置完成後,訊息一旦傳送失敗,就會按照訊息重發機制配置好的重發次數,時間間隔等因素,再次傳送。


可以看到配置檔案中:<property name="maximumRedeliveries" value="1"></property>

設定的重發一次,但是控制檯打印出來兩個條訊息“2”。這就是第一次傳送,失敗後她又傳送了一次,也就是兩次。

以上就是訊息重發機制的所有實現。