我使用 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 次消息,然后等待。- ETC。
我的问题是:为什么 ActiveMQ 在重新调度之前传递消息 6 次?