通过Spring Boot ActiveMQ进行持久性重试

时间:2017-08-01 16:20:51

标签: java spring-boot apache-camel activemq

我正在尝试使用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以使用重新传递延迟。

0 个答案:

没有答案