У меня есть сценарий 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')
... и если через час приходит сообщение, я получаю такую ошибку:
File "/usr/local/lib/python3.7/asyncio/events.py", line 88, in _run
self._context.run(self._callback, *self._args)
File "/var/opt/rabbitmq-agent.py", line 34, in push_to_queue
raise Exception("Error sending the message to the queue: " + format(e))
Exception: Error sending the message to the queue: Send message to publisher error: Channel allocation requires an open connection: <SelectConnection CLOSED socket=None params=<ConnectionParameters host=x port=xvirtual_host=/ ssl=False>>
Я полагаю, что соединение между сервером rabbitmq и клиентом было закрыто.
Как мне этого избежать? Я хотел бы иметь "пожалуйста, всегда поддерживайте соединение". Может быть установка сверхбольшого биения в параметрах подключения Пика? Что-то вроде этого:
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=self.host, credentials=self.credentials, heartbeat=6000))
Любые другие кулеры были бы очень признательны.
заранее спасибо