如何在队列上的 ActiveMQ 中设置 redeliveryPolicy?
1)在文档中,请参阅:activeMQ 重新传送 http://activemq.apache.org/redelivery-policy.html,说明您应该在 ConnectionFactory 或 Connection 上设置它。但我想对不同的队列使用不同的值。
2)除此之外,我似乎无法正常工作。在 Spring 中的连接工厂上设置它(我使用的是 activemq 5.4.2. 和 Spring 3.0),如下所示似乎没有任何效果:
<amq:connectionFactory id="amqConnectionFactory" brokerURL="${jms.factory.url}" >
<amq:properties>
<amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
</amq:properties>
</amq:connectionFactory>
我还尝试将其设置为定义的队列上的属性,但这似乎也被忽略,因为重新传递发生的时间早于定义的值:
<amq:queue id="jmsQueueDeclarationSnd" physicalName="${jms.queue.declaration.snd}" >
<amq:properties>
<amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
</amq:properties>
</amq:queue>
Thanks
我也使用了上面伊万展示的方法amq:连接工厂
在升级到 ActiveMQ 5.7.0 时,我注意到这不再有效(因为实施了https://issues.apache.org/jira/browse/AMQ-3224 https://issues.apache.org/jira/browse/AMQ-3224)。无论如何,在阅读了我目前使用的 ActiveMQ 论坛上更好的帖子后:-
<amq:queue id="emailQueue" physicalName="emailQueue" />
<amq:queue id="smsQueue" physicalName="smsQueue" />
<!-- Wait 15 seconds first re-delivery, then 45, 135, 405, 1215, 3645 seconds -->
<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
<property name="backOffMultiplier" value="3" />
<property name="initialRedeliveryDelay" value="15000" />
<property name="maximumRedeliveries" value="6" />
<property name="queue" value="*" />
<property name="redeliveryDelay" value="15000" />
<property name="useExponentialBackOff" value="true" />
</bean>
<amq:connectionFactory id="jmsFactory" brokerURL="yourProtocol/BrokerURL">
<property name="redeliveryPolicy" ref="redeliveryPolicy" />
</amq:connectionFactory>
请注意,对于 6 次重试后重新投递失败的任何消息,ActiveMQ 将创建一个 DLQ.emailQueue' 或 DLQ.smsQueue 并将消息放入该队列中(将其从原始队列中出队)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)