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

291 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Инструкция по запуску Celery (Development)
## 📋 Предварительные требования
### 1. Установка Redis
**Windows:**
```bash
# Через WSL2
wsl --install
wsl
sudo apt update
sudo apt install redis-server
redis-server --daemonize yes
# Или скачать с https://github.com/microsoftarchive/redis/releases
```
**Linux/Mac:**
```bash
# Ubuntu/Debian
sudo apt install redis-server
sudo systemctl start redis
# MacOS
brew install redis
brew services start redis
```
**Docker (рекомендуется):**
```bash
docker run -d -p 6379:6379 --name redis redis:7-alpine
```
### 2. Проверка Redis
```bash
redis-cli ping
# Должно вернуть: PONG
```
---
## 🚀 Установка зависимостей
```bash
# Активировать виртуальное окружение
.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`:
```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):
```bash
python manage.py migrate django_celery_beat
python manage.py migrate django_celery_results
```
---
## 🏃 Запуск Celery Worker
### Вариант 1: Базовый запуск
```bash
cd backend
celery -A eusrr_backend worker -l info
```
### Вариант 2: С указанием очередей
```bash
celery -A eusrr_backend worker -l info -Q default,notifications,emails
```
### Вариант 3: С autoscale (для production)
```bash
celery -A eusrr_backend worker -l info --autoscale=10,3
# 10 = максимум workers, 3 = минимум workers
```
---
## 🕐 Запуск Celery Beat (периодические задачи)
**Отдельное окно терминала:**
```bash
cd backend
celery -A eusrr_backend beat -l info
```
---
## 🌺 Запуск Flower (мониторинг)
**Отдельное окно терминала:**
```bash
cd backend
celery -A eusrr_backend flower --port=5555
```
Откройте в браузере: http://localhost:5555
---
## 🧪 Тестирование
### 1. Проверка подключения
```bash
cd backend
python manage.py shell
```
```python
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 (рекомендуется)
- URL: http://localhost:5555
- Видны: активные задачи, история, графики
### Через Redis CLI
```bash
redis-cli
> KEYS *celery*
> LLEN celery
> LRANGE celery 0 10
```
### Через Django shell
```python
from django_celery_results.models import TaskResult
TaskResult.objects.all()
```
---
## 🛑 Остановка
```bash
# Ctrl+C в каждом окне терминала (worker, beat, flower)
# Или через pkill (Linux/Mac)
pkill -f "celery worker"
pkill -f "celery beat"
pkill -f "celery flower"
```
### Остановка Redis
```bash
# 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
```bash
# Очистить очередь
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
```bash
# Очистить все данные Celery
redis-cli KEYS "celery*" | xargs redis-cli DEL
# Мониторинг в реальном времени
redis-cli MONITOR
```
---
## 🔄 Development workflow
### Типичный процесс работы:
**Терминал 1: Django**
```bash
.venv/Scripts/python manage.py runserver
```
**Терминал 2: Celery Worker**
```bash
celery -A eusrr_backend worker -l info
```
**Терминал 3: Celery Beat** (если нужны периодические задачи)
```bash
celery -A eusrr_backend beat -l info
```
**Терминал 4: Flower** (опционально)
```bash
celery -A eusrr_backend flower
```
**Терминал 5: Redis** (если запускали вручную)
```bash
redis-server
```
---
## 🎯 Следующие шаги
После успешного запуска:
1. ✅ Создать первую задачу в `notifications/tasks.py`
2. ✅ Протестировать отправку уведомления через Celery
3. ✅ Измерить улучшение производительности
4. ✅ Настроить периодические задачи
5. ✅ Настроить мониторинг в production
---
## 📚 Документация
- Celery: https://docs.celeryq.dev/
- Flower: https://flower.readthedocs.io/
- Django Celery Beat: https://django-celery-beat.readthedocs.io/
- Redis: https://redis.io/docs/