Кейс · Go-бэкенд
Конвейер: очередь задач
Очередь фоновых задач: приоритеты, отложенные и cron-задачи, ретраи с backoff и jitter, dead-letter, идемпотентные ключи, lease с fencing, метрики Prometheus.
- Go
- SQLite
- REST API
- SSE
- Prometheus
- Docker
01 · Как выглядит
Скриншоты


02 · О проекте
Что это и зачем
Очередь фоновых задач «Конвейер»: персистентная в SQLite, с пулом воркеров, приоритетами, отложенными и cron-задачами, ретраями с экспоненциальным backoff и jitter и dead-letter с ручным повтором.
Гарантия at-least-once: задача держится под lease с heartbeat, а токен аренды (fencing) не даёт «зомби»-воркеру испортить результат. Есть метрики Prometheus и живой дашборд на SSE.
Ограничения
Демо-обработчики (email.send, image.resize, webhook.call) только имитируют работу: ничего не отправляется.
Один файл SQLite, масштабирование только в пределах одной машины. Только at-least-once, обработчики должны быть идемпотентными; нет цепочек задач и rate limit по очередям. Счётчики метрик обнуляются при перезапуске.
Что внутри
- Приоритеты 0-9, отложенный запуск, собственный разбор cron-выражений (списки, диапазоны, шаги, @daily и т. д.)
- Идемпотентные ключи: повторная постановка возвращает существующую задачу, в том числе при гонке
- Атомарный захват задачи одним UPDATE ... RETURNING, без двойного исполнения даже из двух процессов
- Lease и reaper для упавших воркеров, graceful shutdown с возвратом недоделанных задач в очередь
- REST API, /metrics в формате Prometheus, дашборд
- Тесты с -race на конкурентный захват, lease, backoff, cron и shutdown; Docker
03 · Как запустить
Запуск одной командой
git clone <репозиторий по запросу> job-queue
cd job-queue
API_TOKEN=demo SEED_DEMO=1 go run ./cmd/server # http://localhost:808504 · Код
Репозиторий приватный
Исходники лежат в приватном репозитории. Открою доступ по запросу: напишите, и пришлю приглашение.
Запросить код