Какой правильный тип исключения для NACK сообщения с использованием прослушивателя на основе аннотаций в spring -boot с amqp?

Я использую весеннюю загрузку с 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), если возможно.


person whitenexx    schedule 29.08.2016    source источник


Ответы (1)


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

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

person Gary Russell    schedule 29.08.2016