Каков правильный тип исключения для 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 в цепочке причин (контейнер перебирает причины, чтобы убедиться, что такого исключения нет).

Другие вопросы по тегам