Jms 为什么ActiveMQ会在重新安排稍后的重新交付之前发送消息6次?
我使用apacheMQ作为队列管理器。我正在使用Spring的DefaultMessageListenerContainer来使用这些消息。我已将其配置为具有事务: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
<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,您将获得服务器端的重新交付。这两者可能同时存在,导致这种行为。