RabbitMQ消费端报:delivery acknowledgement on channel 5 timed out. Timeout value used: 1800000 ms. This t
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
场景
消费端日志控制台报如下错误
2022-11-25 13:18:29.354 ERROR 13368 --- [.15.178.36:5672] o.s.a.r.c.CachingConnectionFactory :1575 - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - delivery acknowledgement on channel 5 timed out. Timeout value used: 1800000 ms. This timeout value can be configured, see consumers doc guide to learn more, class-id=0, method-id=0)
分析
1、rabbitmq开启手动确认模式之后但是在消费消息之后没有确认导致
2、消息确认超时的间隔太短导致
解决
1、在消费端消费后无论消费正常还是异常都要ack确认
channel.basicAck(deliveryTag, false);
或
channel.basicNack(deliveryTag, false, false);
或
channel.basicReject(deliveryTag, false);
2、在 rabbitmq 服务端的配置文件中禁用或配置更长的超时时间
配置超时间隔
【1】进入 rabbitmq 容器cd 到 /etc/rabbitmq/ 目录
// 进入rabbitmq容器
docker exec -ti rabbitmq bash
//进入配置文件目录
cd /etc/rabbitmq/
【2】编辑 rabbitmq.conf 文件如果没有此文件请创建名为 rabbitmq.conf 文件
touch rabbitmq.conf
vim rabbitmq.conf
【3】把 consumer_timeout 属性加入文件中值(单位毫秒)设置更长一些默认30分钟
consumer_timeout = 1800000
禁用确认超时不建议这样做
1、编辑 rabbitmq.conf 文件在文件中添加如下内容
%% advanced.config
[
{rabbit, [
{consumer_timeout, undefined}
]}
].
参考官方介绍https://www.rabbitmq.com/consumers.html#acknowledgement-timeout