我正在使用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次?
答案 0 :(得分:0)
如果你不能交付,那就是一件事,当你交付时,另一件事就是你得到一个例外。 http://activemq.apache.org/message-redelivery-and-dlq-handling.html
我认为默认毒丸价值是6? 对此不确定。