Corp/docs/guides/CELERY_SETUP.md
Игорь Надеин 065e1f2efd feat: интеграция Celery для асинхронной обработки уведомлений
- Добавлена конфигурация Celery (eusrr_backend/celery.py)
- Созданы async задачи для уведомлений (notifications/tasks.py)
- Обновлены все notification_signals на create_notification_async()
- Добавлен метод NotificationService.create_notification_async() с fallback
- Установлены пакеты: django-celery-beat, django-celery-results, flower
- Применены миграции для Celery приложений
- Документация: CELERY_SETUP.md, CELERY_INTEGRATION_PLAN.md

Производительность: уменьшение времени отправки сообщений с ~500ms до <50ms
2026-01-08 16:14:00 +03:00

6.5 KiB
Raw Blame History

Инструкция по запуску Celery (Development)

📋 Предварительные требования

1. Установка Redis

Windows:

# Через WSL2
wsl --install
wsl
sudo apt update
sudo apt install redis-server
redis-server --daemonize yes

# Или скачать с https://github.com/microsoftarchive/redis/releases

Linux/Mac:

# Ubuntu/Debian
sudo apt install redis-server
sudo systemctl start redis

# MacOS
brew install redis
brew services start redis

Docker (рекомендуется):

docker run -d -p 6379:6379 --name redis redis:7-alpine

2. Проверка Redis

redis-cli ping
# Должно вернуть: PONG

🚀 Установка зависимостей

# Активировать виртуальное окружение
.venv/Scripts/activate  # Windows
source .venv/bin/activate  # Linux/Mac

# Установить новые пакеты
cd backend
pip install -r requirements.txt

Новые пакеты:

  • redis - клиент для Redis
  • django-celery-beat - периодические задачи
  • django-celery-results - хранение результатов
  • flower - веб-интерфейс мониторинга

🔧 Настройка окружения

1. Добавить в .env:

# Redis & Celery
REDIS_HOST=localhost
REDIS_PORT=6379
CELERY_BROKER_URL=redis://localhost:6379/0
CELERY_RESULT_BACKEND=redis://localhost:6379/1

2. Применить миграции (для django-celery-beat):

python manage.py migrate django_celery_beat
python manage.py migrate django_celery_results

🏃 Запуск Celery Worker

Вариант 1: Базовый запуск

cd backend
celery -A eusrr_backend worker -l info

Вариант 2: С указанием очередей

celery -A eusrr_backend worker -l info -Q default,notifications,emails

Вариант 3: С autoscale (для production)

celery -A eusrr_backend worker -l info --autoscale=10,3
# 10 = максимум workers, 3 = минимум workers

🕐 Запуск Celery Beat (периодические задачи)

Отдельное окно терминала:

cd backend
celery -A eusrr_backend beat -l info

🌺 Запуск Flower (мониторинг)

Отдельное окно терминала:

cd backend
celery -A eusrr_backend flower --port=5555

Откройте в браузере: http://localhost:5555


🧪 Тестирование

1. Проверка подключения

cd backend
python manage.py shell
from eusrr_backend.celery import debug_task
result = debug_task.delay()
print(f"Task ID: {result.id}")
print(f"Status: {result.status}")

2. Проверка через Django admin

  • Перейти в админку: http://localhost:8000/admin/
  • Найти раздел "Periodic Tasks" (от django-celery-beat)
  • Создать тестовую задачу

📊 Мониторинг

Через Flower (рекомендуется)

Через Redis CLI

redis-cli
> KEYS *celery*
> LLEN celery
> LRANGE celery 0 10

Через Django shell

from django_celery_results.models import TaskResult
TaskResult.objects.all()

🛑 Остановка

# Ctrl+C в каждом окне терминала (worker, beat, flower)
# Или через pkill (Linux/Mac)
pkill -f "celery worker"
pkill -f "celery beat"
pkill -f "celery flower"

Остановка Redis

# Docker
docker stop redis

# Systemd
sudo systemctl stop redis

# WSL
redis-cli shutdown

🐛 Отладка проблем

Проблема: Worker не запускается

Решение:

  1. Проверьте Redis: redis-cli ping
  2. Проверьте .env файл
  3. Убедитесь что виртуальное окружение активно
  4. Проверьте логи: celery -A eusrr_backend worker -l debug

Проблема: Задачи не выполняются

Решение:

  1. Проверьте очереди: redis-cli LLEN celery
  2. Проверьте Flower: http://localhost:5555
  3. Проверьте worker logs
  4. Убедитесь что worker запущен с нужной очередью

Проблема: Redis connection refused

Решение:

  1. Убедитесь что Redis запущен
  2. Проверьте порт: netstat -an | grep 6379
  3. Проверьте CELERY_BROKER_URL в .env

📝 Полезные команды

Celery

# Очистить очередь
celery -A eusrr_backend purge

# Инспекция workers
celery -A eusrr_backend inspect active
celery -A eusrr_backend inspect stats

# Список зарегистрированных задач
celery -A eusrr_backend inspect registered

Redis

# Очистить все данные Celery
redis-cli KEYS "celery*" | xargs redis-cli DEL

# Мониторинг в реальном времени
redis-cli MONITOR

🔄 Development workflow

Типичный процесс работы:

Терминал 1: Django

.venv/Scripts/python manage.py runserver

Терминал 2: Celery Worker

celery -A eusrr_backend worker -l info

Терминал 3: Celery Beat (если нужны периодические задачи)

celery -A eusrr_backend beat -l info

Терминал 4: Flower (опционально)

celery -A eusrr_backend flower

Терминал 5: Redis (если запускали вручную)

redis-server

🎯 Следующие шаги

После успешного запуска:

  1. ✅ Создать первую задачу в notifications/tasks.py
  2. ✅ Протестировать отправку уведомления через Celery
  3. ✅ Измерить улучшение производительности
  4. ✅ Настроить периодические задачи
  5. ✅ Настроить мониторинг в production

📚 Документация