Example usage for org.springframework.amqp.rabbit.listener BlockingQueueConsumer setBackOffExecution

List of usage examples for org.springframework.amqp.rabbit.listener BlockingQueueConsumer setBackOffExecution

Introduction

In this page you can find the example usage for org.springframework.amqp.rabbit.listener BlockingQueueConsumer setBackOffExecution.

Prototype

public void setBackOffExecution(BackOffExecution backOffExecution) 

Source Link

Document

Set the BackOffExecution to use for the recovery in the SimpleMessageListenerContainer .

Usage

From source file:org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.java

protected BlockingQueueConsumer createBlockingQueueConsumer() {
    BlockingQueueConsumer consumer;
    String[] queues = getRequiredQueueNames();
    // There's no point prefetching less than the tx size, otherwise the consumer will stall because the broker
    // didn't get an ack for delivered messages
    int actualPrefetchCount = getPrefetchCount() > this.txSize ? getPrefetchCount() : this.txSize;
    consumer = new BlockingQueueConsumer(getConnectionFactory(), this.messagePropertiesConverter,
            this.cancellationLock, getAcknowledgeMode(), isChannelTransacted(), actualPrefetchCount,
            isDefaultRequeueRejected(), getConsumerArguments(), isExclusive(), queues);
    if (this.declarationRetries != null) {
        consumer.setDeclarationRetries(this.declarationRetries);
    }//w  w  w  .  ja  v  a2s .  c o m
    if (this.failedDeclarationRetryInterval != null) {
        consumer.setFailedDeclarationRetryInterval(this.failedDeclarationRetryInterval);
    }
    if (this.retryDeclarationInterval != null) {
        consumer.setRetryDeclarationInterval(this.retryDeclarationInterval);
    }
    if (getConsumerTagStrategy() != null) {
        consumer.setTagStrategy(getConsumerTagStrategy());
    }
    consumer.setBackOffExecution(this.recoveryBackOff.start());
    consumer.setShutdownTimeout(getShutdownTimeout());
    return consumer;
}

From source file:org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.java

private void restart(BlockingQueueConsumer consumer) {
    synchronized (this.consumersMonitor) {
        if (this.consumers != null) {
            try {
                // Need to recycle the channel in this consumer
                consumer.stop();// w  ww.  ja  v a 2  s .  c o  m
                // Ensure consumer counts are correct (another is going
                // to start because of the exception, but
                // we haven't counted down yet)
                this.cancellationLock.release(consumer);
                this.consumers.remove(consumer);
                BlockingQueueConsumer newConsumer = createBlockingQueueConsumer();
                newConsumer.setBackOffExecution(consumer.getBackOffExecution());
                consumer = newConsumer;
                this.consumers.put(consumer, true);
            } catch (RuntimeException e) {
                logger.warn(
                        "Consumer failed irretrievably on restart. " + e.getClass() + ": " + e.getMessage());
                // Re-throw and have it logged properly by the caller.
                throw e;
            }
            this.taskExecutor.execute(new AsyncMessageProcessingConsumer(consumer));
        }
    }
}