Перейти к содержанию

Temporal: длительные процессы и восстановление после сбоев

Проект «Согласование» резервирует место для материала, ждёт решения редактора и публикует либо освобождает бронь. Temporal хранит историю процесса, а собственный учебный HTTP gateway хранит внешние эффекты и квитанции. Эта граница помогает понять, что устойчивый Workflow не отменяет требований к идемпотентности внешнего сервиса.

Нужны TypeScript, async/await, HTTP и основы командной строки. Используем локальный Temporal dev-server, Node.js 24 и SDK 1.24.0. В проекте нет реальной отправки писем или публикации рабочего сайта. Workflow-стадии полные; README объясняет, какие истории допускаются при переключении версии.

Урок Результат
1. Длительный процесс как Workflow Выбрать идентичность и границы процесса, отличив его от одной job.
2. Минимальный каркас Связать Workflow, Activity, Worker, Client и собственный gateway.
3. Task Queue и Worker Понять получение задач и корректное завершение исполнителя.
4. Устойчивый таймер Сохранить ожидание между перезапусками Worker.
5. Signal, Query и срок решения Передать решение редактора и наблюдать состояние.
6. Retries, timeouts и heartbeat Ограничить попытки и различить сетевой сбой и предметный конфликт.
7. Идемпотентная Activity Получить прежнюю квитанцию после потерянного ответа.
8. Отмена Workflow Связать cancel, HTTP AbortSignal и cleanup.
9. Компенсация и ручное решение Освободить возможную бронь и выразить неподтверждённый исход.
10. History и replay Отделить воспроизведение решений от новых внешних действий.
11. Patched и versioning Добавить validation с совместимым переходом от стадии 09.
12. Передача процесса Описать состояние, ручную сверку и границу Continue-As-New.

Скачать полные исходники. Архив содержит семь полных вариантов Workflow и общие Worker, Client, Activities, gateway, README и регламент передачи.

Серия опубликована. Зависимости не устанавливались, TypeScript не собирался, программы, серверы, Activities, cancellation, compensation и replay не запускались. Тесты и публикация учебных приложений не проводились. JSON history не включена, поскольку исполнений не было; все результаты ожидаемые.

Учебный gateway работает одним процессом и не является производственной базой. Release освобождает бронь, но не отзывает уже опубликованный материал. Эти границы сохраняются в каждом соответствующем этапе и документации примера.

Вернуться к подборке веб-продуктов.