edb*_*ras 13 activemq-classic spring-jms
如何在队列中的ActiveMQ中设置redeliveryPolicy?
1)在doc中,请参阅:activeMQ Redelivery,解释您应该在ConnectionFactory或Connection上设置它.但我想为不同的Queue使用不同的值.
2)除此之外,我似乎没有得到它的工作.在Spring中的连接工厂上设置它(我使用的是带有Spring 3.0的activemq 5.4.2),这似乎没有任何影响:
<amq:connectionFactory id="amqConnectionFactory" brokerURL="${jms.factory.url}" >
<amq:properties>
<amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
</amq:properties>
</amq:connectionFactory>
Run Code Online (Sandbox Code Playgroud)
我还尝试将其设置为已定义的队列上的属性,但似乎也会被忽略,因为重新传递比定义的值更早发生:
<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>
Run Code Online (Sandbox Code Playgroud)
谢谢
我也使用上面Ivan所示的方法来获取amq:connectionFactory
在升级到ActiveMQ 5.7.0的同时,我注意到它不再有效(自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>
Run Code Online (Sandbox Code Playgroud)
请注意,对于在重试6次后无法重新传递的任何消息,ActiveMQ将创建DLQ.emailQueue'或DLQ.smsQueue并将该消息排入该队列(将其从原始队列中取出).
我通过如上所述在工厂设置它来工作,但仅在创建连接工厂作为Spring bean而不是通过XBean时,如上所示.这是因为xsd不允许您将redeliveryPolicy设置为对象,而只是将其设置为String.在Spring的DefaultMessageListenerContainer中将缓存级别设置为Consumer后,一切正常.
在队列中,似乎你可以简单地设置一个交付策略...奇怪,因为我想为不同的队列/主题设置不同的设置.想象一下,你有一个缓慢而快速的队列,或者你连接的外部系统,需要更多的时间来恢复..也许这个功能仍然有待实现
| 归档时间: |
|
| 查看次数: |
21474 次 |
| 最近记录: |