feat: split worker into separate binary (cmd/worker)
Kafka consumers and WorkerPool are moved out of the server process into a dedicated worker binary. Server now handles HTTP + SSE only; worker handles Kafka consumption and AI processing. - cmd/worker/main.go + init.go: new binary with minimal config (DATABASE_URL, OPENAI_API_KEY, KAFKA_BROKERS) - cmd/server: remove WorkerPool, paidConsumer, freeConsumer - Dockerfile: builds both server and worker binaries - docker-compose.yml: add worker service - Makefile: add run-worker and docker-logs-worker targets - README.md: document worker startup and env vars Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -63,6 +63,43 @@ make migrate-up
|
||||
make run
|
||||
```
|
||||
|
||||
### 4. Запуск воркера
|
||||
|
||||
Сервер (`cmd/server`) и воркер (`cmd/worker`) — два отдельных процесса:
|
||||
|
||||
- **Сервер** — обслуживает HTTP API и SSE-стримы; публикует задания распознавания в Kafka.
|
||||
- **Воркер** — потребляет задания из Kafka, вызывает AI, сохраняет результаты в БД и оповещает сервер через `pg_notify`.
|
||||
|
||||
**Локально** (инфраструктура в Docker, процессы локально):
|
||||
|
||||
```bash
|
||||
# Поднять Kafka + PostgreSQL
|
||||
docker compose up -d postgres kafka kafka-init
|
||||
|
||||
# В отдельном терминале — сервер
|
||||
make run
|
||||
|
||||
# В другом терминале — воркер
|
||||
go run ./cmd/worker
|
||||
```
|
||||
|
||||
**Переменные окружения воркера:**
|
||||
|
||||
| Переменная | Описание |
|
||||
|---|---|
|
||||
| `DATABASE_URL` | DSN подключения к PostgreSQL |
|
||||
| `OPENAI_API_KEY` | Ключ Gemini API (для распознавания блюд) |
|
||||
| `KAFKA_BROKERS` | Адреса Kafka-брокеров (по умолчанию `kafka:9092`) |
|
||||
|
||||
**Через Docker Compose** (сервер + воркер + инфраструктура):
|
||||
|
||||
```bash
|
||||
OPENAI_API_KEY=your-key docker compose up app worker
|
||||
```
|
||||
|
||||
Воркеры можно масштабировать горизонтально — запустите несколько контейнеров `worker`,
|
||||
они разделят нагрузку через consumer group `dish-recognition-workers`.
|
||||
|
||||
## Команды
|
||||
|
||||
### Сервер и тесты
|
||||
|
||||
Reference in New Issue
Block a user