Redis и RabbitMQ могут быть идеальными брокерами при использовании Celery, но когда вы разрабатываете локально, они могут показаться излишними. В документации к Celery 5.4 упоминается, что вы можете использовать SQLite в качестве экспериментального брокера для локальной разработки. Однако, когда вы переходите на страницу серверов и брокеров Celery, SQL упоминается только для SQLAlchemy backend. К счастью, на странице отмечается, что «в этом разделе не рассматриваются серверные части и брокеры».
Этот пост покажет вам, как реализовать брокер SQLite (или любой SQL!) для Celery в проекте Django. Этот пост не научит вас использовать Celery: ознакомьтесь с официальной документацией Celery.
Для целей этого поста мы предполагаем, что у вас уже есть существующий проект Django с установленным Celery, следуя инструкциям из официального руководства Celery «Первые шаги с Django». Серверная часть Celery не необходима, но вы можете следовать инструкциям руководства по установке и настройке django-celery-results. Если вам неясно, в чем разница между бэкэндами и брокерами, прочтите мою статью «Понимание задач, брокеров, воркеров и бэкэндов в Celery».
Все ссылки на исходную документацию будут относиться к текущим версиям Django, Celery и SQLAlchemy на момент публикации (июль 2024 г.), если явно не указано иное. Если вы читаете это в далеком будущем, возможно, все изменится.
Хотя Celery управляет задачами и очередями, он делегирует полномочия другой библиотеке под названием Kombu для обмена сообщениями с брокером. RabbitMQ и Redis — наиболее полнофункциональные транспорты (брокеры) Kombu, но у него также есть виртуальные транспорты для Amazon SQS, ZooKeeper и MongoDB.
В дальних уголках документации Комбу спрятана транспортная модель SQLAlchemy, которая поддерживает PostgreSQL, MySQL и SQLite. Когда-то брокер SQLAlchemy даже был задокументирован на веб-сайте Celery, но с тех пор он был удален из документации в новых версиях библиотеки. Тем не менее, он по-прежнему работает достаточно хорошо для местного развития.
Чтобы использовать базу данных сиквела в качестве брокера Celery в вашем приложении Django, сначала установите SQLAlchemy:
pip install SQLAlchemy
В файле settings.py вашего проекта Django вы можете настроить серверную часть вашего брокера, используя настройку CELERY_BROKER_URL:
# BASE_DIR is the directory of your project's main directory. CELERY_BROKER_URL = f"sqlalchemy sqlite:////{BASE_DIR}/broker.sqlite3"
URL-адрес SQLAlchemy брокера состоит из трех частей:
Строки подключения для SQLite на Mac/Unix и Windows различаются:
# MacOS/Unix CELERY_BROKER_URL = "sqla sqlite:////your/project/path/broker.sqlite3" # Windows CELERY_BROKER_URL = "sqla sqlite:///C:your\\project\\path\\broker.sqlite3"
Вы также можете использовать Postgres в качестве брокера Celery или с такой же легкостью использовать MySQL в качестве брокера Celery:
# MySQL CELERY_BROKER_URL = "sqlalchemy mysql://scott:tiger@localhost/foo" # PostgreSQL CELERY_BROKER_URL = "sqla postgresql://scott:tiger@localhost/mydatabase" # PosgreSQL connecting using pg8000 CELERY_BROKER_URL = "sqla postgresql pg8000://scott:tiger@localhost/mydatabase"
Возможно, вам придется установить другие библиотеки для подключения к MySQL или PostgreSQL, и какая библиотека вы устанавливаете, может повлиять на строку подключения SQLAlchemy. Дополнительные сведения см. в документации по URL-адресу базы данных SQLAlchemy.
Независимо от того, какую базу данных вы выберете, возможно, вы захотите сохранить URL-адрес брокера в переменной среды, чтобы его можно было легко изменить в разных средах:
CELERY_BROKER_URL = os.getenv("CELERY_BROKER_URL")
Транспорт SQLAlchemy, скорее всего, считается экспериментальным и поэтому не предназначен для промышленного использования. Может произойти потеря данных или сообщения могут быть доставлены несколько раз. Рассмотрите возможность перехода на более надежного брокера, который указан на странице «Брокеры и бэкэнды» Celery.
Тем не менее, это может подойти для местной разработки или даже для небольших побочных проектов. Но я не удивлюсь, если в будущем возможность использовать SQLAlchemy в качестве брокера исчезнет.
Когда Celery работает локально, вы можете начать работу над приложением, работающим с очередью. Тем не менее, вы можете обнаружить, что отсутствие автоматической перезарядки является предметом разногласий. Если вы хотите настроить автоматическую перезагрузку Celery в своем приложении Django, прочитайте мой пост «Автоматическая перезагрузка рабочих Celery с помощью специальной команды Django».
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3