所以我有一个发布者,它使用schedulepython包从文件中读取数据,每5-10分钟一次,并将每一行发布到队列。 另一方面,我让消费者使用类似的东西:
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
self.channel = self.connection.channel()
while True:
method, properties, body = self.channel.basic_get(queue=conf.UNIVERSAL_MESSAGE_QUEUE, no_ack=False)
if body is not None:
self.assign_task(body=body)
self.channel.basic_ack(delivery_tag=method.delivery_tag)
else:
self.logger.info('channel empty')
self.move_to_done()
time.sleep(5)
分配任务功能如下所示:
def assign_task(body=body):
<do something with the message body>
由于某种原因,一段时间后它会抛出以下错误:
2017-08-03 15:27:43,756: ERROR: base_connection.py: _handle_error: 335: Socket Error: 10054
2017-08-03 15:27:43,756: WARNING: base_connection.py: _check_state_on_disconnect: 180: Socket closed when connection was open
2017-08-03 15:27:43,756: WARNING: connection.py: _on_disconnect: 1360: Disconnected from RabbitMQ at localhost:5672 (0): Not specified
本质上,发布者和消费者都是2个不同的python程序,旨在使用Windows Server 2012在一台机器上运行。社区可以帮助了解这里可能出现的问题吗?
相同的代码在我的窗口机器上本地运行绝对正常
以下是我的日志文件的输出。=ERROR REPORT==== 3-Aug-2017::15:06:48 ===
closing AMQP connection <0.617.0> ([::1]:53485 -> [::1]:5672):
missed heartbeats from client, timeout: 60s
对此的简单答案是创建一个持久队列并将heartbeat_interval设置为 0。