ActiveMQ 重發機制(消息發送失敗后的重新發送)


一、重新傳遞消息的情況

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>  

 


免責聲明!

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



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