Spring ActiveMQ 整合(二): 重發機制(訊息傳送失敗後的重新發送)
阿新 • • 發佈:2019-01-07
之前已經寫了一個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”。這就是第一次傳送,失敗後她又傳送了一次,也就是兩次。
以上就是訊息重發機制的所有實現。