# Очереди сообщений (Message Queue)
Очередь сообщений позволяет запускать обработку данных в отдельных процессах - воркерах.
В этой статье мы разберем процесс подключения Yandex Message Queue (opens new window) к Celery (opens new window) и Django (opens new window). Запуск воркеров будет происходить в Serverless Container.
Презентация из видео (opens new window)
Установите CLI
Перед началом установите Yandex Cloud CLI
# Настройка и запуск воркера
Установите и настройте модуль celery-yandex-serverless
(opens new window).
Создайте статический ключ доступа
# Автоматизация
- Добавьте переменные окружения в Gitlab CI Variables. Описание переменных здесь (opens new window).
YANDEX_MESSAGE_QUEUE_ARN
CELERY_YANDEX_SERVERLESS_KEY
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
CELERY_BROKER_URL=sqs://message-queue.api.cloud.yandex.net:443
CELERY_BROKER_IS_SECURE=true
- В
.gitlab-ci.yml
в конце блокаscript
добавьте новую команду:
script:
# (другие команды)
# пересоздаем триггер
- yc serverless trigger delete --name celery > /dev/null || echo
- >
yc serverless trigger create message-queue
--name celery
--queue $YANDEX_MESSAGE_QUEUE_ARN
--queue-service-account-name $SERVICE_ACCOUNT_NAME
--service-account-id $SERVICE_ACCOUNT_ID
--invoke-container-service-account-id $SERVICE_ACCOUNT_ID
--invoke-container-path /worker/$CELERY_YANDEX_SERVERLESS_KEY
--batch-size 1
--batch-cutoff 10s
2
3
4
5
6
7
8
9
10
11
12
13
14
# Запуск по расписанию (cron)
Бывает необходимость запускать операции в приложении по расписанию в определенное время (например, раз в день нужно сделать синхронизацию данных в внешней системой). В Linux серверах это делается с помощью cron
.
В Celery есть celery-beat
, делающий то же самое. Но в serverless-развертывании воркер как таковой не запускается, поэтому нужно настраивать запуск по расписанию иначе.
Эту задачу поможет решить триггер "Таймер". О нем написано в документации Яндекс.Облака (opens new window). Создать его можно как через интерфейс, так и через консоль.
Написать cron выражение для триггера поможет сайт crontab.guru (opens new window).