我正在尝试使用Spring Boot通过ActiveMQ 5.14.2配置持久重传,但它只是忽略了我的部分配置。
根据http://activemq.apache.org/message-redelivery-and-dlq-handling.html(文档中的最后一条语句),我在apache-activemq-5.14.2 / conf / activemq.xml中的schedulerSupport="true"
元素中添加了broker
所以它现在看起来像这样:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" schedulerDirectory="${activemq.data}/scheduler" schedulerSupport="true" dataDirectory="${activemq.data}">
我还添加了重新发送政策:
<plugins>
<redeliveryPlugin fallbackToDeadLetter="true"
sendToDlqIfMaxRetriesExceeded="true">
<redeliveryPolicyMap>
<redeliveryPolicyMap>
<redeliveryPolicyEntries>
<!-- a destination specific policy -->
<redeliveryPolicy queue="payments"
maximumRedeliveries="10"
redeliveryDelay="10000"/>
</redeliveryPolicyEntries>
<defaultEntry>
<!-- the fallback policy for all other destinations -->
<redeliveryPolicy maximumRedeliveries="10"
initialRedeliveryDelay="0"
redeliveryDelay="10000"/>
</defaultEntry>
</redeliveryPolicyMap>
</redeliveryPolicyMap>
</redeliveryPlugin>
</plugins>
在我的spring-boot应用程序中,我添加了config,如下所示:
@Bean
public RedeliveryPolicy redeliveryPolicy(ActiveMQConnectionFactory connectionFactory) {
RedeliveryPolicy redeliveryPolicy = connectionFactory.getRedeliveryPolicy();
redeliveryPolicy.setMaximumRedeliveries(10);
redeliveryPolicy.setRedeliveryDelay(10000);
redeliveryPolicy.setInitialRedeliveryDelay(0);
redeliveryPolicy.setUseExponentialBackOff(false);
connectionFactory.setRedeliveryPolicy(redeliveryPolicy);
return redeliveryPolicy;
}
问题在于,无论何时在我的应用程序中抛出异常 - ActiveMQ重试重新发送消息10次(正如我指定的那样)但它完全忽略了重新传递延迟,因此它可以毫不拖延地进行10次重新传输。
问题是如何配置ActiveMQ以使用重新传递延迟。