Jms 为什么ActiveMQ会在重新安排稍后的重新交付之前发送消息6次?

Jms 为什么ActiveMQ会在重新安排稍后的重新交付之前发送消息6次?,jms,activemq,spring-jms,Jms,Activemq,Spring Jms,我使用apacheMQ作为队列管理器。我正在使用Spring的DefaultMessageListenerContainer来使用这些消息。我已将其配置为具有事务: <bean id="jmsContainerXXX" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="myConnectionF

我使用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>
我已将ApacheQ配置为具有特定的重新传递策略,因此,如果消息未成功处理,则会在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>
最后,在消息侦听器中,我放置了一个粗体的“thrownewruntimeexceptionpoum;”以确保交付失败

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


我的问题是:为什么ActiveMQ在重新调度之前会发送消息6次?

如果您无法发送,这是一回事;如果您发送消息,但遇到异常,这是另一回事。

我想默认的毒丸值是6?
对此不确定。

您可能在ActiveMQConnectionFactory上有一个默认的重新交付策略,这是服务器基本上不知道的客户端重新交付。使用redeliveryPlugin,您将获得服务器端的重新交付。这两者可能同时存在,导致这种行为。