Durable-хранилище в SQL
Принятая работа хранится в JobsHot. Завершенные задания уходят в Archive, а неуспешные - в DLQ для разбора оператором.
Background job engine с durable-хранилищем в SQL Server, типизированными заданиями, retry, изоляцией очередей, health checks и дашбордом The Deck.

ChokaQ - это background job engine для .NET-приложений.
В обычном request/response-коде пользователь ждет, пока приложение выполнит всю работу. Для быстрых операций это нормально. Для медленных или ненадежных операций - отправки email, генерации отчетов, вызовов partner API, платежей или обработки webhooks - это плохая граница.
ChokaQ позволяет request-пути сказать: "сохрани эту работу, выполни ее в фоне и сделай состояние видимым".
Базовая модель простая:
Удобно думать о ChokaQ как о трех совместно работающих частях:
| Часть | Простое объяснение | Почему это важно |
|---|---|---|
| Job storage | Durable-журнал принятой работы. | В SQL Server mode задания переживают restart процесса. |
| Workers | Фоновые исполнители, которые забирают и выполняют задания. | Работа выполняется вне request-пути. |
| The Deck | Операторское окно в систему. | Видны lag, ошибки, очереди, retries и строки DLQ. |
Самая важная таблица - JobsHot. В ней находится активная работа: задания, которые ждут выполнения, уже забраны воркером или прямо сейчас обрабатываются. Завершенные задания уходят из Hot, чтобы таблица активной работы оставалась маленькой и быстрой.
Если вы впервые смотрите на ChokaQ, начните с Runtime Model. Там объясняется, где ChokaQ работает, как он хранит work и как вызывает ваши handlers. Затем переходите к Обзору для более широкой картины.
Если хотите сразу запустить код, начните с Getting Started или Docker Compose Sample.
Если оцениваете надежность, прочитайте Delivery Guarantees до того, как писать обработчик, который отправляет email, списывает деньги или вызывает внешнюю систему.
Если хотите понять архитектуру, дальше идут Three Pillars, State Machine и SQL Concurrency.
| Шаг | Что происходит | Смысл для человека |
|---|---|---|
| Enqueue | Задание вставляется в JobsHot. | Система приняла работу. |
| Fetch | Воркер забирает подходящую работу через SQL locking. | Теперь заданием владеет один воркер. |
| Processing | Обработчик выполняет пользовательский код. | Выполняется бизнес-операция. |
| Success | Строка переносится в Archive. | Задание завершилось штатно. |
| Retry | Строка остается в Hot с расписанием на будущее. | Повторить позже, не удерживая спящий поток. |
| DLQ | Строка переносится в Dead Letter Queue. | Нужен разбор человеком или repair workflow. |
Начните с малого
Сначала запустите пример, а потом читайте документацию, глядя на The Deck. UI помогает быстрее понять архитектуру: вы видите, как задания переходят между состояниями, а не только читаете об этом.