Rabbit MQ StreamLostError с библиотекой python pika - PullRequest
0 голосов
/ 20 марта 2020

Когда я слушаю свою очередь с помощью библиотеки python pika, я всегда получаю StreamLostError и мой код разрушается.

В моем коде я должен слушать очередь без исключения вечно и получать сообщения 1 на 1.

Вот мой код (я упростил его).

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()  

1 Ответ

0 голосов
/ 17 апреля 2020

Проблема в том, что ваша работа занимает слишком много времени и блокирует ввод / вывод Пики oop. Это приводит к пропуску сердцебиения, и RabbitMQ считает, что ваше соединение разорвано.

Пожалуйста, ознакомьтесь с этим кодом для одного правильного способа выполнения длительной работы:

https://github.com/pika/pika/blob/master/examples/basic_consumer_threaded.py


ПРИМЕЧАНИЕ: команда RabbitMQ контролирует список рассылки rabbitmq-users и только иногда отвечает на вопросы в StackOverflow.

...