• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    调整

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

    查看

    # 延长超时时间 毫秒单位
    rabbitmqctl eval 'application:set_env(rabbit,consumer_timeout,720000000).'
    
    
    # 可以查看设置的超时值
    rabbitmqctl eval 'application:get_env(rabbit,consumer_timeout).'
    
    
    值得注意的是,这个事临时更改,永久更改需要进入rabbitmq.conf文件里修改,修改consumer_timeout参数
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    docker 修改配置文件

    1. 新增 conf 配置文件

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

    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 地址。
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    2. 重新制作容器,映射配置文件
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    3. 确认
    进入容器,再次执行,可以看到成功修改。
    rabbitmqctl eval 'application:get_env(rabbit,consumer_timeout).'
    
    
    • 1
    • 2
    • 3
  • 相关阅读:
    【数据结构】栈和队列重点知识汇总(附有OJ题)
    无涯教程-JavaScript - ERFC.PRECISE函数
    Python旅游门票收费问题
    高NA镜头系统中的高级PSF计算
    医院管理中,什么才算得上智慧机房?
    ClickHouse 笔记1 | 简介、特点 | 基于CentOS7系统的安装与使用 | 常用数据类型 | MergeTree 表引擎 | SQL操作
    React props属性使用及子传父组件使用
    服装界BOM的管理方式
    镜舟科技荣获金科创新社 2024 年度金融数据智能解决方案奖
    信号线多长算长呢——之上升沿与时延的爱恨情仇
  • 原文地址:https://blog.csdn.net/fwzzzzz/article/details/136228759