Документация go-bpm
go-bpm — BPM-движок для Go-сервисов. Процесс рисуется в BPMN, бизнес-правила — в таблицах DMN. Генератор превращает их в обычный типизированный Go-код, а движок исполняет этот код на очереди задач в PostgreSQL — в той же базе, что и данные сервиса. Отдельного сервера процессов, как у Camunda, нет: движок — библиотека внутри вашего сервиса.
С чего начать#
| Если вы хотите | Читайте |
|---|---|
| за пять минут увидеть, как это работает | Быстрый старт → демо |
| встроить движок в свой сервис | Быстрый старт → свой сервис |
| понять, что такое BPMN и DMN и как go-bpm их исполняет | Принципы работы |
| нарисовать процесс, который go-bpm поймёт | Моделирование BPMN |
| описать бизнес-правила таблицей | Решения DMN |
| разобраться в генераторе и сгенерированном коде | Генератор кода |
| посмотреть на работающие процессы и их код | Разбор примеров |
| настроить, запустить и сопровождать сервис | Запуск и эксплуатация |
| запускать процессы и работать с задачами извне | HTTP API и консоль |
Коротко о главном#
- Процесс — это код. Условия шлюзов, скрипты и таблицы DMN генерируются в Go-функции до запуска. Опечатку в условии или переменную не того типа покажет компилятор при генерации, а не ошибка в рантайме.
- Шаг процесса — задача очереди. Всё, что делает шаг (переход токена, история, новые задачи), пишется в базу одной транзакцией с завершением задачи. Упал сервис посередине — шаг повторится целиком, токен не потеряется и не раздвоится.
- Данные процесса — Go-структура. Переменные процесса читаются в вашу
DataModel, методы работают с полями, а не сmap[string]any. - Нужен только PostgreSQL. Очередь, история, экземпляры и задачи пользователей — таблицы
bpm_*в вашей базе. - Консоль из коробки.
/ui/: список процессов, запуск, поиск экземпляров, задачи пользователей и история экземпляра поверх диаграммы.
Словарь#
| Термин | Что значит |
|---|---|
| Процесс | Схема из BPMN-файла: bpmn:process с id, например TestUserTask |
| Экземпляр | Один запуск процесса, у него свой id (UUID v7), переменные и статус |
| Токен | «Где сейчас находится» экземпляр. Параллельный шлюз делит токен на ветки, слияние собирает обратно |
| Элемент | Узел или переход схемы: задача, событие, шлюз, sequence flow. У каждого есть id |
| Переменные | Данные экземпляра: JSON-объект, который идёт вместе с токеном |
DataModel | Ваша Go-структура, в которую читаются переменные для методов, условий и решений |
| jobType | Тип service task (zeebe:taskDefinition type), по нему выбирается обработчик |
| Метод | Синхронная функция задачи (task, scriptTask, businessRuleTask) |
| Обработчик | Асинхронная функция service task, вызывается отдельной задачей очереди с повторами |
| Бизнес-ключ | Свободный текст при старте (номер заказа, id клиента), по нему ищут экземпляры |
Внутренние решения и история проекта — в context.md: это журнал для разработчиков движка, а не пользовательская документация.