
Современные подходы к разработке программного обеспечения диктуют необходимость быстрого внедрения и изменения бизнес-сценариев прямо в продакшене. Особенно это критично для систем, где логика процессов часто корректируется — например, в финансовых, маркетинговых или рекламных платформах.
Одним из наиболее удобных инструментов для этого сегодня является оркестрация с использованием BPMN-диаграмм, где визуальное моделирование бизнес-процесса превращается в исполняемую логику.
Немного теории:
Что такое оркестрация
Оркестрация — это управляемая последовательность действий и вызовов функций, организованная в определённую логику.
Проще говоря, это когда:
если условие X → выполняем действие A иначе → выполняем действие B
Даже такой простой пример уже является формой оркестрации. В реальности сценарий может включать параллельные ветви, агрегацию данных, ветвление по условиям, и вызовы внешних сервисов.
Что такое BPMN
BPMN (Business Process Model and Notation) — это стандарт описания бизнес-процессов, позволяющий визуально моделировать логику работы системы.
Инструменты вроде Camunda Modeler дают возможность создавать диаграммы, которые можно прямо исполнять в коде.
Это ключевое преимущество: разработчик и аналитик работают над одной моделью, без двойного дублирования логики.
Camunda 7 Embedded: быстрая интеграция в код
Camunda 7 можно встроить прямо в Java-приложение как embedded-движок.
Это особенно удобно, если вы хотите локально тестировать или исполнять процессы без отдельного сервера.
Пример минимальной конфигурации:
<!-- pom.xml --> <dependency> <groupId>org.camunda.bpm</groupId> <artifactId>camunda-engine</artifactId> <version>7.21.0</version> </dependency>
Создадим простой процесс в Camunda Modeler — файл process.bpmn:
<bpmn:process id="example_process" isExecutable="true"> <bpmn:startEvent id="StartEvent" name="Начало"/> <bpmn:serviceTask id="CheckCondition" name="Проверить условие" camunda:class="com.example.CheckConditionDelegate"/> <bpmn:endEvent id="EndEvent" name="Конец"/> <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="CheckCondition"/> <bpmn:sequenceFlow id="Flow2" sourceRef="CheckCondition" targetRef="EndEvent"/> </bpmn:process>
А теперь — код Java:
import org.camunda.bpm.engine.*; import org.camunda.bpm.engine.runtime.ProcessInstance; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.camunda.bpm.engine.delegate.DelegateExecution; public class Example { public static void main(String[] args) { ProcessEngine processEngine = ProcessEngineConfiguration .createStandaloneInMemProcessEngineConfiguration() .buildProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); repositoryService.createDeployment() .addClasspathResource("process.bpmn") .deploy(); ProcessInstance instance = processEngine.getRuntimeService() .startProcessInstanceByKey("example_process"); System.out.println("Процесс запущен: " + instance.getId()); } } class CheckConditionDelegate implements JavaDelegate { @Override public void execute(DelegateExecution execution) { boolean flag = Math.random() > 0.5; System.out.println("Условие = " + flag); execution.setVariable("result", flag ? "A" : "B"); } }
Проблемы и ограничения Camunda 7 Embedded
Camunda 7 требует постоянного соединения с базой данных (по умолчанию SQL). В продакшене чаще всего используется PostgreSQL, но у него ограниченный пул соединений, что при большом числе потоков может стать узким местом.
💡 В тестовой среде можно использовать H2 — это встроенная база, простая и быстрая. Однако Camunda официально не рекомендует её для продакшена.
Альтернативы: Picodata, Zeebe и др.
В некоторых случаях стоит рассмотреть Picodata — она совместима по протоколу с PostgreSQL и масштабируется горизонтально. Это может быть выходом, если требуется высокая производительность при одновременном доступе множества экземпляров Camunda.
Почему не Zeebe (Camunda 8)?
Zeebe требует отдельный кластер и дополнительную DevOps-инфраструктуру. Embedded-вариант Camunda 7 гораздо проще и быстрее встраивается в микросервисную архитектуру.
Итоги:
Оркестрация на BPMN — это не просто визуализация логики, а живое отражение бизнес-процесса в коде.
Интеграция Camunda 7 Embedded позволяет:
быстро вводить новые сценарии в продакшен
легко изменять последовательности действий без полной сборки приложения
использовать единый язык общения между аналитиками и разработчиками
Подписывайтесь на канал для получения информации от ИТ архитектора с более чем 20 летним стажем.
