← Все проекты

Кейс · Go-бэкенд

Конвейер: очередь задач

Очередь фоновых задач: приоритеты, отложенные и cron-задачи, ретраи с backoff и jitter, dead-letter, идемпотентные ключи, lease с fencing, метрики Prometheus.

  • Go
  • SQLite
  • REST API
  • SSE
  • Prometheus
  • Docker

01 · Как выглядит

Скриншоты

Скриншот проекта «Конвейер: очередь задач» на экране 1280 пикселей
Десктоп, 1280 px
Скриншот проекта «Конвейер: очередь задач» на экране телефона, 390 пикселей
Телефон, 390 px

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:8085

04 · Код

Репозиторий приватный

Исходники лежат в приватном репозитории. Открою доступ по запросу: напишите, и пришлю приглашение.

Запросить код