go-bpm

Документация 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: это журнал для разработчиков движка, а не пользовательская документация.

Предложить правку на GitHub