针对特定队列的ActiveMQ自定义重新传递策略

时间:2016-09-15 07:38:03

标签: jms activemq spring-jms

我目前正在通过创建bean并在amq connectionFactory上设置它来配置重新传递。问题是,对于我的一个队列,我需要设置不同的重新传递策略(最大重新传输数量为3,而不是6)。现在我正在使用ActiveMQ-5.6.0。我可以看到,对于5.7.0,我可以为队列/主题设置不同的策略,但是没有提到仅为其中一个队列设置特定策略。

<amq:connectionFactory id="amqConnectionFactory">
    <property name="brokerURL" value="url" />
    <property name="redeliveryPolicy" ref="redeliveryPolicy" />
</amq:connectionFactory>

<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
    <property name="backOffMultiplier" value="2" />
    <property name="initialRedeliveryDelay" value="15000" />
    <property name="maximumRedeliveries" value="6" />
    <property name="redeliveryDelay" value="15000" />
    <property name="useExponentialBackOff" value="true" />
</bean>

1 个答案:

答案 0 :(得分:1)

最近我创建了类似的东西,但我没有使用spring bean注释。但也许它会有所帮助。我基于我附加的代理插件 在这里你有RedeliveryPolicy:

private RedeliveryPolicy redeliveryPolicy() {
    RedeliveryPolicy queuePolicy = new RedeliveryPolicy();
    return queuePolicy;
}

您必须创建BrokerPlugin []

private BrokerPlugin[] createBrokerPlugin() {
    BrokerPlugin[] bp = new BrokerPlugin[1];
    RedeliveryPlugin redeliveryPlugin = new RedeliveryPlugin();
    redeliveryPlugin.setRedeliveryPolicyMap(createRedeliverPolicy(connectionFactory));
    bp[0] = redeliveryPlugin;
    return bp;
}

当你有Brokerplugin数组时,你可以轻松地将它添加到你的嵌入式代理:

@Bean
public Broker broker() throws Exception {
    BrokerService broker = new BrokerService();
    broker.setBrokerName(BROKER_NAME);
    broker.setPlugins(createBrokerPlugin());
    broker.start();
    return broker.getBroker();
}