Async Django MQTT Client не может переподключить pg-pool через 24 часа
Позвольте мне рассказать вам о своей структуре и проблеме. У меня есть контейнеры sync и async на K8. Эти капсулы запускаются с помощью этой команды в моем docker-entrypoint.sh gunicorn myappname.wsgi:application --worker-class gevent --workers 3 --bind 0.0.0.0:8000
. В асинхронных контейнерах я запускаю несколько MQTT-клиентов (paho.mqtt.client
). Это мой пользовательский apps.py
, который запускает клиентов асинхронно:
import asyncio
import importlib
import sys
from os import environ
from django.apps import AppConfig, apps
from django.db import connection
from .server import MQTTConsumer # inherited from paho.mqtt.Client
from .consumers import ResponseConsumer
class CustomMqttConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'custom.mqtt'
def ready(self):
for _app in apps.app_configs.keys():
topic_patterns = [
('$share/my-app/response', ResponseConsumer)
]
connection.close()
for _topic, _consumer in topic_patterns:
asyncio.run(MQTTConsumer()(topic=_topic, consumer=_consumer))
Все работало идеально, пока не прошло 24 часа после первого init моих потребителей. После 24 часов я получаю connection closed
ошибку на каждый MQTT запрос от моей БД (в данном случае pg-pool) НО когда я открываю оболочку в моем async контейнере (docker exec -it <container_id> bash
) и попадаю в оболочку django (python manage.py shell
) я могу использовать мои модели и фильтровать мою БД, в то время как мои потребители выбрасывают эту ошибку.
Я проверил свой pg-пул (show pool_processes
) до и после перезапуска моих async-подов и увидел, что после перезагрузки все работает отлично. Новые соединения видны в pool_processes
, а мои потребители продолжают получать и обрабатывать запросы mqtt без каких-либо ошибок. Я отслеживаю эти ошибки и заметил, что это происходит каждые 24 часа.
Мои асинхронные подсистемы получают 300K MQTT-сообщений почти каждую секунду. Я подумал, что могу проверить соединение с БД для каждого приходящего сообщения и переподключиться, если это необходимо, но я считаю, что это вызовет проблемы с производительностью.
Версии:
...
Django==5.0.2
paho-mqtt=2.0.0
...
Изображения:
bitnami/pgpool:latest
postgres:15
Никаких дополнительных параметров не определено ни в settings.py, ни где-либо еще.
Жду ваших комментариев или советов. Спасибо с этого момента.