一、重新傳遞消息的情況
ActiveMQ在接收消息的Client有以下幾種操作的時候,需要重新傳遞消息:
1:Client用了transactions(事務),且在session中調用了rollback()
2:Client用了transactions,且在調用commit()之前關閉
3:Client在CLIENT_ACKNOWLEDGE的傳遞模式下,在session中調用了recover()
二、寫RedeliveryPolicy配置文件
<!-- 定義ReDelivery(重發機制)機制 ,重發時間間隔是100毫秒,最大重發次數是3次 --> <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的配置:
<!--創建連接工廠 --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"></property> <property name="redeliveryPolicy" ref="activeMQRedeliveryPolicy" /> <!-- 引用重發機制 --> </bean>