Обработка исключений в Spring AMQP MessagePostProcessor

Я написал MessagePostProcessor, который вызывается до вызова любого потребителя onMessage.

Теперь, если в моем MessagePostProcessor возникает какое-либо исключение, мне нужно поймать исключение, иначе сообщение будет бесконечно запрашиваться на сервере Rabbitmq Q, снова и снова возвращаясь туда и сюда. Итак, исправьте эту проблему, мне нужно поймать исключение в моем компоненте MessagePostProcessor, но из-за этого потребители не получают правильную проблему для проблемы на своем конце.

Какова наилучшая практика обработки таких сценариев.

Псевдо-сообщениеПостпроцессор

@Service 
public class TestPostProcessor implements MessagePostProcessor {

    /**
 * {@inheritDoc}
 */
@Override
public Message postProcessMessage(Message message) {
    try {
        // some logic
    } catch (Exception exception) {
        // log error
    }
    return message;
}

}


person Akshat    schedule 07.09.2016    source источник


Ответы (1)


Но из-за этого потребители не получают правильную проблему для своего конца.

Я не уверен, что вы имеете в виду.

Если постпроцессор по какой-то причине не может обработать сообщение, вы можете выдать AmqpRejectAndDontRequeuException, и сообщение будет отброшено (или перенаправлено на DLX/DLQ, если это настроено).

Если вы хотите, чтобы сообщение было передано потребителю, но каким-то образом сообщило о проблеме потребителю, вы можете вернуть совершенно новый Message или добавить некоторые данные в заголовки.

message.getMessageProperties().getHeaders().set("badMessageInfo", ...);
person Gary Russell    schedule 07.09.2016