rabbitmq Rabbit MQ StreamLostError与python pika库配合使用

vktxenjb  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(228)

当我用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()
bvhaajcl

bvhaajcl1#

如果你使用的是pika URLParameters,请尝试在请求中设置connection_attempts和retry_delay参数。请查看下面的链接以获取更多信息。在我的例子中,我在AMPQ www.example.com之后添加了?connection_attempts=20&retry_delay=1https://pika.readthedocs.io/en/stable/modules/parameters.html#urlparameters

waxmsbnn

waxmsbnn2#

问题是你的工作时间太长,阻塞了Pika的I/O循环,导致心跳丢失,RabbitMQ认为你的连接已经死了。
请参阅以下代码,了解执行长时间运行工作的一种正确方法:
https://github.com/pika/pika/blob/master/examples/basic_consumer_threaded.py

**注意:**RabbitMQ团队监控rabbitmq-users邮件列表,仅在某些时候回答StackOverflow上的问题。

相关问题