我有一个Python脚本,它从流中读取内容,当一个新字符串被读取时,它将其内容(字符串)推送到RabbitMQ队列。在
问题是流可能不会在1、2或9小时内发送消息,所以我希望RabbitMQ连接始终打开。在
问题是当我创建连接和通道时:
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=self.host, credentials=self.credentials))
channel = self.connection.channel()
channel.exchange_declare(exchange=self.exchange_name, exchange_type='fanout')
。。。如果一小时后有消息到达,我会得到这个错误:
^{pr2}$我认为rabbitmq服务器和客户机之间的连接已经关闭。在
我怎样才能避免这种情况?我想要一个“请保持连接始终有效”。也许在Pika的连接参数中设置了一个超大的心跳?像这样:
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=self.host, credentials=self.credentials, heartbeat=6000))
如果有其他更酷的解决方案,我们将不胜感激。在
提前谢谢
您可以尝试将
heartbeat
添加到您的ConnectionParameters
中。这将通过每指定秒发送心跳来创建流量较小的流量。这将锻炼人际关系。一些防火墙或代理程序倾向于抓取空闲连接。即使是RabbitMQ也有空闲连接的超时。在请参见here获取pika文档。在
此外,您应该有适当的代码,以减轻网络断开。这种事总是会发生而且会发生的。因此,来自heartbeat的appart有一些异常处理准备以一种优雅的方式重新打开关闭的连接。在
我建议你每次发送消息前都要检查连接,如果连接被关闭,那么只需重新连接。在
相关问题 更多 >
编程相关推荐