我编写了一个MessagePostProcessor,在调用任何消费者onMessage之前调用它 .
现在,如果我的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
,或者向头部添加一些数据 .