首页 文章

Spring AMQP MessagePostProcessor中的异常处理

提问于
浏览
0

我编写了一个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 回答

  • 2

    但正因为如此,消费者最终没有得到正确的问题 .

    我不确定你的意思 .

    如果后处理器由于某种原因无法处理消息,则可以抛出 AmqpRejectAndDontRequeuException 消息(如果已配置,则丢弃(或路由到DLX / DLQ)) .

    如果您希望将消息传递给使用者,但以某种方式将问题传达给使用者,您可以返回一个全新的 Message ,或者向头部添加一些数据 .

    message.getMessageProperties().getHeaders().set("badMessageInfo", ...);
    

相关问题