写系统的时候要传给另一个模块数据, 直接用了rabbitmq 没用 celery分发, 然后因为对 AMQP 协议不熟在heartbeat 上出了很多问题。
1. heartbeat 不能为 0, 已经设置过,但是可能当时没有内存扩容(这就要说AWS家辣鸡需要自己手动扩容了,否则只有8G存储空间)不知道为什么经常消费者会收不到信息, 怀疑是分配的资源用完了,要么就是丢包自己又不知道,还傻乎乎地等着,又没有 timeout这个让它停下
2. 执行长任务的时候会出问题: 错误:
pika.exceptions.ProbableAccessDeniedError: StreamLostError: (“Stream connection lost: ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。’, None, 10054, None)”,)
拜托了,这就是heartbeat设置时间太短被rabbitmq服务端断连的问题。
解决方法:
1. 根据经验设置一个好的heartbeat(做不到,对面接收方是爬淘宝京东各大电商数据,还要翻出去搞海外数据,能不被ban就不错了)
2. 耗时消费者多线程: 主线程回复心跳包, 另一个线程做任务, 具体代码:
import pika
import pandas as pd
import json
import os
import time
import threading
credentials = pika.PlainCredentials("tester","123456")
'''--------