Mircea Badescu
Mircea Badescu

Reputation: 301

ActiveMQ custom redelivery policy for a specific queue

I'm currently configuring the redelivery by creating a bean and setting it on the amq connectionFactory. The problem is that for one of my queues I need to set a different redelivery policy (a maximum redeliveries number of 3, not 6). Right now I'm using ActiveMQ-5.6.0. I can see that for 5.7.0 I can set different policies for queues/topics but there's no mention of setting a specific policy for only one of the queues.

<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>

Upvotes: 0

Views: 567

Answers (1)

Michal
Michal

Reputation: 109

Recently I've created something similar but I didn't operate on spring bean annotations. But maybe it will help. I base on broker plugin which I attached to it Here you have RedeliveryPolicy:

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

You have to create BrokerPlugin[]

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

when you have Brokerplugin array you can easily add it to your embeded broker:

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

Upvotes: 1

Related Questions