# Очереди сообщений (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).

Создайте статический ключ доступа

# Автоматизация

  1. Добавьте переменные окружения в 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
  1. В .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
1
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).

# Источники