2016-09-07 2 views
0

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

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

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

Псевдо MessagePostProcessor

@Service 
public class TestPostProcessor implements MessagePostProcessor { 

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

}

ответ

1

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

Я не уверен, что вы подразумеваете под этим.

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

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

message.getMessageProperties().getHeaders().set("badMessageInfo", ...); 
Смежные вопросы