如何在手动确认模式下在RabbitListenerErrorHandler中重新排队或拒绝?

时间:2019-06-03 07:33:47

标签: spring-boot rabbitmq amqp spring-rabbitmq

我试图通过抛出AmqpRejextAndDontRequeueException拒绝RabbitListenerErrorHandler中的消息。

但是它不能在手动确认模式下工作(在自动确认模式下可以正常工作)。

我该如何在手动确认模式下拒绝RabbitListenerErrorHander中的消息?

public class RabbitListenerExceptionHandler implements RabbitListenerErrorHandler {
    @Override
    public Object handleError(Message amqpMessage, org.springframework.messaging.Message<?> message, ListenerExecutionFailedException exception)
        throws Exception {
        log.error("RabbitListenerHandler " + exception.getMessage() + "|" + exception.getFailedMessage());
        throw new AmqpRejectAndDontRequeueException("reject");
    }
}

1 个答案:

答案 0 :(得分:0)

使用MANUAL ack模式时,监听器负责ack / nack;容器不会对抛出的任何异常做出反应。

不幸的是,该通道当前在错误处理程序中不可用,因此您必须在侦听器中捕获错误才能确认或拒绝该消息。

我有opened an issue可以解决这个问题。