前言
今天学习rabbitmq的死信队列的消息拒绝内容时,由于编码错误,遇到如下报错:
1.完整的报错信息: ERROR com.rabbitmq.client.impl.ForgivingExceptionHandler - Consumer com.rabbitmq.client.impl.recovery.AutorecoveringChannel$2@2c738a90 (amq.ctag-zao3yz_zLpOKugCIfEe0fg) method handleDelivery for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1) threw an exception for channel AMQChannel(amqp://guest@127.0.0.1:5672/,1)
com.rabbitmq.client.AlreadyClosedException: channel is already closed due to channel error;
2.原因:代码错误,拒绝某些消息时,不能开启消息的自动应答,要设置为手动应答。
上面拒绝了某个消息,要想实现,消费消息时 autoAck 要设置为false,开启手动应答。因为autoAck设置为true的话,是自动应答,不存在消息拒绝的问题(或者说冲突)。
3.解决:消息应答改为手动应答