2016-08-29 7 views
0

Я использую весенний ботинок с spring-amqp и слушателем на основе аннотации, чтобы использовать сообщение от брокера-кролика. Я компонент пружины, который содержит метод, как это:Каков правильный тип исключения для NACK сообщения, использующего прослушиватель на основе аннотации в Spring-Boot с amqp?

@RabbitListener(queues = "tasks") 
    public void receiveMessage(@Payload Task task) {...} 

Я использую режим AUTO для подтверждения сообщения после успешного выполнения receiveMessage (...). Если я обнаруживаю особую ошибку, я бросаю AmqpRejectAndDontRequeueException, чтобы получить это сообщение в настроенную очередь мертвой буквы. Теперь мне нужно только выгрузить сообщение, чтобы сообщение было отправлено в основную очередь rabbitmq, и у другого потребителя появилась возможность снова работать над этим сообщением.

Какое исключение я должен использовать для этого? Я не хотел бы использовать channel.basicNack (...), как описано здесь (http://docs.spring.io/spring-integration/reference/html/amqp.html), если это возможно.

ответ

1

Пока defaultRequeueRejected является true (по умолчанию) в контейнере завода, бросали любое исключение, кроме AmqpRejectAndDontRequeueException вызовет сообщение должно быть отвергнуто и requeued.

Исключение не должно содержать AmqpRejectAndDontRequeueException в цепочке причин (контейнер пересекает причины, чтобы исключить такое исключение).