当我用python pika库监听我的队列时,我总是得到StreamLostError和我的代码崩溃。
在我的代码中,我必须无例外地永远侦听队列,并且必须一个接一个地获取消息。
这是我的代码(我简化了它)。
def callback(ch, method, properties, body):
ch.basic_ack(delivery_tag = method.delivery_tag)
#doing work here, it gets minimum 5 minutes, sometimes maximum 1 hour
credentials = pika.PlainCredentials(username, password)
parameters = pika.ConnectionParameters(ip, port, '/', credentials)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
channel.basic_qos(prefetch_count=1)
channel.queue_declare(queue=queuename, durable=True)
channel.basic_consume(queue=queuename, on_message_callback=callback, auto_ack=False)
channel.start_consuming()
2条答案
按热度按时间bvhaajcl1#
如果你使用的是pika URLParameters,请尝试在请求中设置connection_attempts和retry_delay参数。请查看下面的链接以获取更多信息。在我的例子中,我在AMPQ www.example.com之后添加了
?connection_attempts=20&retry_delay=1
https://pika.readthedocs.io/en/stable/modules/parameters.html#urlparameterswaxmsbnn2#
问题是你的工作时间太长,阻塞了Pika的I/O循环,导致心跳丢失,RabbitMQ认为你的连接已经死了。
请参阅以下代码,了解执行长时间运行工作的一种正确方法:
https://github.com/pika/pika/blob/master/examples/basic_consumer_threaded.py
**注意:**RabbitMQ团队监控
rabbitmq-users
邮件列表,仅在某些时候回答StackOverflow上的问题。