我正在使用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 回答
一件事,如果你不能交付,它是另一件事,当你交付,但你得到一个例外 . http://activemq.apache.org/message-redelivery-and-dlq-handling.html
我认为默认毒丸 Value 是6?对此不确定 .