Asynq: полный курс по фоновым задачам в Go
Письма, отчёты, картинки, вебхуки — всё, что дольше 100 мс, не должно выполняться в HTTP-хендлере. Asynq — библиотека от хостинга Birdie на Redis: простые типизированные задачи, ретраи, приоритеты, периодика и готовый веб-интерфейс.
Проходим библиотеку целиком: клиент и сервер, payload и task ID, отложенные и периодические задачи, политики ретраев, несколько очередей с весами, группы и агрегация, таймауты и дедлайны, уникальность, Inspector, graceful shutdown и тесты. Каждый урок — код с построчным разбором, интерактив и реальные грабли продакшена.
Чему научитесь
Чему научитесь
- Строить клиент и воркер asynq и подключать Redis
- Отправлять отложенные, периодические и уникальные задачи
- Настраивать ретраи, таймауты и приоритеты очередей
- Мониторить задачи через Inspector и asynqmon
- Писать идемпотентные обработчики и плавно останавливать воркеры
- Тестировать задачи без ожидания реального времени
Для кого курс
- Backend-разработчикам, которым нужны фоновые процессы
- Тем, кто перерос cron и горутины с каналами
- Командам, мигрирующим с самописных очередей на Redis
Что понадобится
- Базовый синтаксис Go: функции, ошибки, контекст
- Желательно курс go-redis — Redis встретимся на старте
Программа курса: 25 уроков
- 1Знакомство: почему не HTTP-хендлерПисьма, отчёты, вебхуки: что уходит в фон и почему.~16 мин · asynq golang, фоновые задачи go
- 2Установка: клиент, воркер и Redisgo get, asynq.NewClient, NewServer, redis opt.~18 мин · asynq установка, asynq redis подключение
- 3Первая задача: отправить письмоТип задачи, payload, клиент Enqueue и хендлер ProcessTask.~20 мин · asynq первая задача, asynq processtask
- 4Payload и task ID: данные задачиjson.Marshal, MaxRetry, Queue, собственные ID.~18 мин · asynq payload, task id asynq
- 5Отложенные задачи: ProcessIn и ProcessAtНапоминания через час, отчёт в полночь.~18 мин · asynq processin, отложенные задачи redis
- 6Ретраи: сколько раз и с каким интерваломDefaultRetryDelay, экспонента, 25 попыток по умолчанию.~18 мин · asynq retry, повторы задач go
- 7Несколько очередей и приоритетыcritical/default/low: вес против строгого порядка.~20 мин · asynq очереди, приоритеты задач go
- 8ServeMux: маршрутизация задачPattern по типу задачи, middleware для задач.~16 мин · asynq servemux, маршрутизация задач
- 9Периодические задачи по cronNewPeriodicTaskManager, cron-выражения, идемпотентность.~20 мин · asynq периодические задачи, asynq cron
- Группы и агрегация задачготовитсяСбор писем в пачку: Group, Aggregator, GracePeriod.~20 мин · asynq группы, агрегация задач go
- 11Таймауты и дедлайн задачиTimeout, Deadline: сколько живёт задача.~16 мин · asynq timeout, дедлайн задач go
- 12Уникальные задачи: UniqueНе слать дважды: TTL уникальности и гонки.~18 мин · asynq unique, уникальные задачи go
- 13Своя политика ретраевRetryLater, кастомный интервал, отступление от экспоненты.~18 мин · asynq retrydelay, свои повторы go
- 14Ошибки: SkipRetry и FatalКогда задача не должна повторяться, ошибки против ретрая.~18 мин · asynq skipretry, ошибки задач go
- 15Inspector: мониторинг из кодаQueueStats, списки задач, отмена и запуск вручную.~20 мин · asynq inspector, мониторинг очереди
- 16Asynqmon: веб-интерфейс очередейDocker-дашборд: что смотреть, когда лаги.~16 мин · asynqmon ui, asynq дашборд
- 17Контекст и зависимости в хендлерахБаза, кэш, конфиг: как передать в хендлер.~18 мин · asynq контекст, зависимости хендлера
- 18Идемпотентность обработчиковЗадача может повториться: проектируем дважды безопасно.~20 мин · идемпотентность задач, asynq идемпотентность
- 19Плавная остановка воркеровSIGTERM, Run против StartAndListen, дожим задач.~18 мин · asynq graceful shutdown, остановка воркеров
- 20Конкурентность и масштабированиеConcurrency, несколько воркеров, разделение очередей.~20 мин · asynq concurrency, масштабирование воркеров
- 21Фоновые задачи в веб-приложенииAPI отправляет, воркер делает: полная связка.~20 мин · asynq web приложение, очередь в api go
- 22Тестирование обработчиковХендлер как функция, фейковый Redis, фиксированное время.~18 мин · тесты asynq, тесты задач go
- 23Логи и метрики задачЧто логировать, счётчики успешных и повторных.~18 мин · asynq метрики, логи очереди go
- 24Грабли продакшена: от утечек до дубликатовЗабытый Redis, длинные задачи, взрыв ретраев.~18 мин · asynq грабли, очереди продакшен go
- 25Итоговый проект: система рассылокОтложенные письма, агрегация, ретраи, дашборд.~24 мин · asynq проект, рассылка go очередь
Вопросы о курсе
Чем asynq лучше самописной очереди на каналах?
Каналы живут в памяти одного процесса: перезапуск — потеря задач. Asynq хранит задачи в Redis: персистентность, ретраи, приоритеты и дашборд из коробки.
Нужен Redis для прохождения?
Нет: весь код разбирается в браузере с реалистичными сценариями. Для практики локально — Docker с одной командой из второго урока.
Подойдёт ли для микросервисов?
Да: задачи и обработчики разделены, клиент может жить в API-сервисе, воркеры — в отдельном. Отдельный урок показывает эту топологию.