为什么ActiveMQ在重新安排重新安排之前将消息传递了6次?

时间:2013-11-12 10:37:34

标签: jms activemq spring-jms

我正在使用apacheMQ作为队列管理器。我正在使用Spring的DefaultMessageListenerContainer来使用消息。我已将其配置为具有交易:

<bean id="jmsContainerXXX" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="myConnectionFactory"/>
    <property name="destination" ref="myDestination"/>
    <property name="messageListener" ref="myMessageListener" />
    <property name="concurrentConsumers" value="5"/>
    <property name="sessionTransacted" value="true" />
</bean>

我已将ApacheMQ配置为具有特定的重新传递策略,因此如果消息未成功处理,则会在1分钟,5分钟,25分钟等后重新传递:

<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
    <redeliveryPolicyMap>
        <redeliveryPolicyMap>
            <!-- the fallback policy for all destinations -->
            <defaultEntry>
                <redeliveryPolicy maximumRedeliveries="10" 
                                  maximumRedeliveryDelay="14400000"
                                  redeliveryDelay="60000"
                                  initialRedeliveryDelay="60000" 
                                  useExponentialBackOff="true"
                                  backOffMultiplier="5"/>
            </defaultEntry>
        </redeliveryPolicyMap>
    </redeliveryPolicyMap>
</redeliveryPlugin>

最后,在消息监听器中,我放置了一个粗体'throw new RuntimeException(“poum”);'确保交货失败。

这是我得到的结果: - 首先,ActiveMQ向我发送了6次消息,然后等待。 - 1分钟后,ActiveMQ再发送6次消息,然后等待。 - 5分钟后,ActiveMQ再发送6次消息,然后等待。 - 等等。

我的问题是:为什么ActiveMQ在重新安排之前传递信息6次?

1 个答案:

答案 0 :(得分:0)

如果你不能交付,那就是一件事,当你交付时,另一件事就是你得到一个例外。 http://activemq.apache.org/message-redelivery-and-dlq-handling.html

我认为默认毒丸价值是6? 对此不确定。