Pika 连接丢失错误:pika.exceptions.StreamLostError:流连接丢失:ConnectionResetError(104,'对等连接重置')
Posted
技术标签:
【中文标题】Pika 连接丢失错误:pika.exceptions.StreamLostError:流连接丢失:ConnectionResetError(104,\'对等连接重置\')【英文标题】:Pika connection lost Error: pika.exceptions.StreamLostError: Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')Pika 连接丢失错误:pika.exceptions.StreamLostError:流连接丢失:ConnectionResetError(104,'对等连接重置') 【发布时间】:2020-03-14 14:23:10 【问题描述】:Traceback(最近一次通话最后一次):
文件“download_image_from_queue.py”,第 44 行,在
channel.start_consuming()
文件“/home/justdial/miniconda3/lib/python3.7/site-packages/pika/adapters/blocking_connection.py”,第 1866 行,在 start_sumption
self._process_data_events(time_limit=None)
文件“/home/justdial/miniconda3/lib/python3.7/site-packages/pika/adapters/blocking_connection.py”,第 2027 行,在 _process_data_events 中
self.connection.process_data_events(time_limit=time_limit)
文件“/home/justdial/miniconda3/lib/python3.7/site-packages/pika/adapters/blocking_connection.py”,第 825 行,在 process_data_events 中
self._flush_output(common_terminator)
文件“/home/justdial/miniconda3/lib/python3.7/site-packages/pika/adapters/blocking_connection.py”,第 522 行,在 _flush_output 中
raise self._closed_result.value.error
pika.exceptions.StreamLostError: Stream connection lost: ConnectionResetError(104, 'Connection reset by peer'
文件“download_image_from_queue.py”:
def callback(ch, method, properties, body):
default_flag = True
try:
data = json.loads(body.decode("utf-8"))['DATA']
url = data['url']
dest_name = data['dest_name']
default_flag = False
except:
print ("\n INCORRECT DATA FORMAT INSERTED INTO THE QUEUE... \n")
pass
if default_flag == False:
os.system("cd /home/images_pred/ && wget -L --timeout=3 --tries=2 -O ".format(url, dest_name))
print ('\n Waiting for the queue to be filled... PRESS CTRL+C TO STOP \n')
credentials = pika.PlainCredentials('abcd', 'BCD')
parameters = pika.ConnectionParameters('0.0.0.1', 5672, '/', credentials )
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
#channel.basic_qos(prefetch_count = 1)
channel.basic_consume(queue = 'IMG_DOWNLOAD', auto_ack = False, on_message_callback = callback)
#channel.basic_ack()
print ('\n Waiting for the queue to be filled... PRESS CTRL+C TO STOP \n')
channel.start_consuming()
一旦开始消费,它就会开始下载,但很快就会出现此错误“pika.exceptions.StreamLostError: Stream connection lost: ConnectionResetError(104, 'Connection reset by peer')”
谁能帮我解决这个问题?
【问题讨论】:
请阅读this和this 【参考方案1】:在作业被处理并且您的进程返回发送 ACK 之前,有许多心跳丢失,因此连接消失了。
理想解决方案(推荐)
使用线程并在线程中运行您的代码。在此处查看示例:
https://github.com/pika/pika/blob/1.0.1/examples/basic_consumer_threaded.py
快速解决方法 [不推荐]
禁用心跳。
如何禁用心跳? --> 在创建连接时传递 heartbeat=0。
pika.ConnectionParameters(
host=RABBIT_MQ_HOST, credentials=CREDENTIALS, heartbeat=0
)
【讨论】:
以上是关于Pika 连接丢失错误:pika.exceptions.StreamLostError:流连接丢失:ConnectionResetError(104,'对等连接重置')的主要内容,如果未能解决你的问题,请参考以下文章
Python3 通过 pika 连接 RabbitMQ 的基本用法
RabbitMQ Python Pika-多个消息的连接处理