• Rabbitmq consumer端超时报错


    0x01 应用场景:

    使用rabbitmq的exchange模式,type为direct,消费端不需要向生产端返回结果no_ack=True

    其中某个consumer任务耗时较长(5min以上),结果consumer端出现如下报错:

    Exception in thread test:
    Traceback (most recent call last):
    File "D:Program Files (x86)pythonlib hreading.py", line 530, in __bootstrap_inner
    self.run()
    File "E:/A_WORK/eclipse/ccin/src/main.py", line 282, in run
    channel.start_consuming()
    File "D:Program Files (x86)pythonlibsite-packagespika-0.10.0-py2.7.eggpikaadapterslocking_connection.py", line 1681, in start_consuming
    self.connection.process_data_events(time_limit=None)
    File "D:Program Files (x86)pythonlibsite-packagespika-0.10.0-py2.7.eggpikaadapterslocking_connection.py", line 647, in process_data_events
    self._flush_output(common_terminator)
    File "D:Program Files (x86)pythonlibsite-packagespika-0.10.0-py2.7.eggpikaadapterslocking_connection.py", line 426, in _flush_output
    raise exceptions.ConnectionClosed()
    ConnectionClosed

    网上查了半天,发现有人说是因为consumer耗时太长,导致product和consumer之间的heartbeat断链了,考虑修改配置文件中的heartbeat时间来规避这个问题。

    0x02 解决方法一:

    修改rabbitmq.config

    1  文件路径:

    file is %APPDATA%RabbitMQ abbitmq.config.

    %APPDATA% usually expands to C:Users\%USERNAME%AppDataRoaming or similar.

    见rabbit安装文件夹下的readme.txt   ~~ abbitmq_server-3.7.2etcREADME.txt

    2 修改 C:Users\%USERNAME%AppDataRoamingRabbitMQ abbitmq.config文件(将rabbitmq.config.example重命名为rabbitmq.config)

        将 %% {heartbeat, 60}, 修改为 {heartbeat, 600}   

        去掉%% 和末尾的逗号','  60秒修改为600秒,或自己定义的更长时间。

    3  使配置生效:

    cmd进入安装目录的sbin文件夹下

    ****** abbitmq_server-3.7.2sbin>

    执行:rabbitmq-service.bat stop  停止服务

              rabbitmq-service.bat  install  重新安装服务,这时才会重新加载config文件

              rabbitmq-service.bat start  开启服务

    提示成功以后,再运行程序,发现就不会出现之前的异常了。

    0x03 解决方法二:

    在建立连接的时候就禁止心跳检测

    producer端和consumer端连接初始化的时候:

    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', heartbeat_interval=0)) 

     

     

  • 相关阅读:
    powerDesigner生成Html及Word
    MySQL中information_schema是什么
    使用Navicat快速生成数据库字典
    SpringBoot学习:使用spring-boot-devtools进行热部署
    ajax 把返回结果作为参数传递
    application.properties详解 --springBoot配置文件
    intellij idea 无法启动或调试 spring-boot
    mybatis添加记录时返回主键id
    springboot form 提交集合 list
    表单提交之List集合
  • 原文地址:https://www.cnblogs.com/taurusfy/p/8287683.html
Copyright © 2020-2023  润新知