условия:
1) использовать менеджер транзакций в спящем режиме
2) очередь помечена как транзакционная
3) использовать SimpleMessageListenerContainer, который поставляется вместе с spring-amqp, для запуска получателя сообщения.
сценарий:
Потребитель генерирует исключение из-за непредвиденной ошибки, которая приводит к откату транзакции гибернации и помещению сообщения в очередь. Об этом позаботится контейнер.
Из-за способа написания SimpleMessageContainer я не смог найти способ удалить сообщение из очереди и получить откат менеджера транзакций платформы. Либо менеджер каналов и транзакций оба отката, либо операция проходит.
Я подумал о том, чтобы пометить сообщение как неуспешное в исключительной ситуации, заполнив поле в сообщении, чтобы, когда оно возвращается к другому потребителю, я мог проанализировать состояние сообщения, используя рекомендации AOP, а затем перенаправить сообщение другому обмену.
Не могу изменить текст сообщения или добавить заголовок, чтобы пометить сообщение в rabbitmq. Каждый раз, когда сообщение возвращается, оно является оригинальным.
Как я могу пометить сообщение?
Каким образом другим людям удалось решить вопрос о перенаправлении сообщений об исключении при откате транзакции?