Spring AMQP异常处理基础

Spring AMQP异常处理基础,spring,amqp,spring-amqp,Spring,Amqp,Spring Amqp,我有一个Listener类,它实现了Spring的MessageListener接口,如果发生异常,我不需要重新查询任何消息,但我想将消息发布到另一个队列 似乎我需要侦听器捕获AmqpRejectAndDontRequeueException,但我已经读到需要它来抛出异常。如果我这样做,我就不能重新发布消息 我是否应该捕捉一个简单的异常并在那里重新发布?此时是否需要实际抛出AmqpRejectAndDontRequeueException 我想知道这方面的最佳做法。谢谢 实现这一点有不同的方法

我有一个Listener类,它实现了Spring的MessageListener接口,如果发生异常,我不需要重新查询任何消息,但我想将消息发布到另一个队列

似乎我需要侦听器捕获AmqpRejectAndDontRequeueException,但我已经读到需要它来抛出异常。如果我这样做,我就不能重新发布消息

我是否应该捕捉一个简单的异常并在那里重新发布?此时是否需要实际抛出AmqpRejectAndDontRequeueException


我想知道这方面的最佳做法。谢谢

实现这一点有不同的方法

最简单的是,您只需要捕获客户端上的所有异常,并抛出一个AmqpRejectAndDontRequeueException


否则,看看FatalExceptionStrategy,你需要有自己的策略,让它始终返回真的

谢谢。如果我不在此时抛出AmqpRejectAndDontRequeueException异常,会发生什么?它会被重新命名吗?我的配置中没有任何带有retryInterceptor的AdviceChain。我应该使用死信队列吗?@mstrom如果您还没有准备好处理异常,为什么需要DLQ,只需覆盖策略或使用try-catch块添加或包围handleMessage方法,如果您通过发布来处理异常,则只需使用该消息即可—无异常意味着该消息已确认。引发该异常的唯一真正原因是您正在使用DLX/DLQ。您还可以使用RepubishMessageRecoverer配置重试拦截器,该拦截器将失败的消息与包含堆栈跟踪等信息的头一起发布到另一个队列。您还可以将defaultRequeueRejected设置为false,以始终拒绝失败的消息,而不考虑异常。