Rabbitmq 超时异常解决:PRECONDITION_FAILED - Timeout value used: 1800000 ms.

Rabbitmq 超时异常解决:PRECONDITION_FAILED - Timeout value used: 1800000 ms.

复制代码
在使用 docker 启动 rabbitmq 的时候,执行一个超长时间的任务,出现了报错。
查询了一下发现,这个问题在于 rabbitmq 默认客户端超时时间是30分钟,手动ACK情况下会如果业务事件较长会超时

RabbitMQ默认的超时时间是30分钟,在消息消费超过30分钟后,rabbitMQ会发生错误,导致整个channel被销毁,无法继续消费

参数为:RABBITMQ_CONSUMER_TIMEOUT

调整

复制代码
如果是客户端直接安装,则需要修改配置文件
如果是docker安装,还是需要修改配置文件。。。使用env的方式启动容器修改,获取docker-compose中修改是不生效的。

查看

shell 复制代码
# 延长超时时间 毫秒单位
rabbitmqctl eval 'application:set_env(rabbit,consumer_timeout,720000000).'


# 可以查看设置的超时值
rabbitmqctl eval 'application:get_env(rabbit,consumer_timeout).'


值得注意的是,这个事临时更改,永久更改需要进入rabbitmq.conf文件里修改,修改consumer_timeout参数

docker 修改配置文件

1. 新增 conf 配置文件

官网: https://www.rabbitmq.com/configure.html#configuration-files

shell 复制代码
vim rabbitmq.conf
## DEFAULT SETTINGS ARE NOT MEANT TO BE TAKEN STRAIGHT INTO PRODUCTION
## see https://www.rabbitmq.com/configure.html for further information
## on configuring RabbitMQ

## allow access to the guest user from anywhere on the network
## https://www.rabbitmq.com/access-control.html#loopback-users
## https://www.rabbitmq.com/production-checklist.html#users
loopback_users.guest = false

## Send all logs to stdout/TTY. Necessary to see logs when running via
## a container
log.console = true
consumer_timeout = 360000000 # 添加的超时参数


# 如果不确定配置文件的内容,可以先启动一下mq的容器,然后进入容器中,使用以下命令查看对应文件地址与内容
rabbitmq-diagnostics status
# 输出的内容中,找到 Config files 地址。
2. 重新制作容器,映射配置文件
shell 复制代码
docker run -d --name myrabbit \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin123 \
-p 15673:15672 -p 5673:5672 -p 25673:25672 -p 1884:1883 \
-v /Users/mzwang/Documents/proj_compose/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
rabbitmq:3.12-management


# 下面的是没有做端口修改的命令
docker run -d --name myrabbit \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin123 \
-p 15672:15672 -p 5672:5672 -p 25672:25672 -p 1883:1883 \
-v /Users/mzwang/Documents/proj_compose/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
rabbitmq:3.12-management
3. 确认
复制代码
进入容器,再次执行,可以看到成功修改。
rabbitmqctl eval 'application:get_env(rabbit,consumer_timeout).'
相关推荐
Wang's Blog8 小时前
RabbitMQ: 消息发送、连接管理、消息封装与三种工程方案
linux·ubuntu·rabbitmq
Wang's Blog14 小时前
RabbitMQ: 声明式配置简化管理
分布式·rabbitmq
爱学大树锯14 小时前
在Docker环境中安装RabbitMQ延迟消息插件实战记录
docker·容器·rabbitmq
Henry_Wu00115 小时前
go与c# 及nats和rabbitmq交互
golang·c#·rabbitmq·grpc·nats
219916 小时前
消息中间件2025技术全景与选型指南
中间件·开源·rabbitmq
白露与泡影17 小时前
RabbitMQ发布订阅模式同一消费者多个实例如何防止重复消费?
分布式·rabbitmq
武子康17 小时前
Java-200 RabbitMQ 架构与 Exchange 路由:fanout/direct/topic/headers
java·架构·消息队列·系统架构·rabbitmq·java-rabbitmq·mq
ysy164806723917 小时前
RabbbitMQ入门:从Windows版本RabbitMQ安装到Spring AMQP实战(一)
windows·rabbitmq·java-rabbitmq
武子康1 天前
Java-199 JMS Queue/Topic 集群下如何避免重复消费:ActiveMQ 虚拟主题与交付语义梳理
java·分布式·消息队列·rabbitmq·activemq·mq·java-activemq
Wang's Blog1 天前
RabbitMQ: 消息过期机制与死信队列技术解析
rabbitmq