Каков правильный тип исключения для NACK-сообщения с использованием прослушивателя на основе аннотаций при загрузке с использованием amqp?
Я использую Spring Boot со Spring-amqp и слушателем на основе аннотаций, чтобы получить сообщение от брокера rabbitmq. У меня есть компонент Spring, который содержит такой метод:
@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
приведет к тому, что сообщение будет отклонено и помещено в очередь.
Исключение не должно иметь AmqpRejectAndDontRequeueException
в цепочке причин (контейнер перебирает причины, чтобы убедиться, что такого исключения нет).