我试图通过抛出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");
}
}
答案 0 :(得分:0)
使用MANUAL ack模式时,监听器负责ack / nack;容器不会对抛出的任何异常做出反应。
不幸的是,该通道当前在错误处理程序中不可用,因此您必须在侦听器中捕获错误才能确认或拒绝该消息。
我有opened an issue可以解决这个问题。