Kora фреймворк для написания Java / Kotlin приложений с упором на производительность, эффективность, прозрачность сделанный разработчиками Т-Банк / Тинькофф

Kora is a framework for writing Java / Kotlin applications with a focus on performance, efficiency, transparency made by T-Bank / Tinkoff developers

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

Camunda BPMN

Экспериментальный модуль

Эксперементальный модуль является полностью рабочим и протестированным, но не гарантирует полностью стабилизированный API и может притерпеть какие либо незначительные изменения перед полной готовностью.

Модуль для подключения оркестратора BPMN процессов на основе Camunda 7

Подключение

Зависимость build.gradle:

implementation "ru.tinkoff.kora.experimental:camunda-engine-bpmn"

Модуль:

@KoraApp
public interface Application extends CamundaEngineBpmnModule { }

Зависимость build.gradle.kts:

implementation("ru.tinkoff.kora.experimental:camunda-engine-bpmn")

Модуль:

@KoraApp
interface Application : CamundaEngineBpmnModule

Требует подключения JDBC модуля.

Конфигурация

Пример полной конфигурации, описанной в классе CamundaEngineBpmnConfig (указаны примеры значений или значения по умолчанию):

camunda {
    engine {
        bpmn {
            jobExecutor {
                corePoolSize = 5 //(1)!
                maxPoolSize = 25 //(2)!
                queueSize = 25 //(3)!
                maxJobsPerAcquisition = 2 //(4)!
            }
            deployment {
                tenantId = "Camunda" //(5)!
                name = "KoraEngineAutoDeployment" //(6)!
                deployChangedOnly = true //(7)!
                resources = "classpath:bpm" //(8)!
                delay = "1m" //(9)!
            }
            parallelInitialization {
                enabled = true //(10)!
                validateIncompleteStatements = true //(11)!
            }
            admin {
                id = "admin" //(12)!
                password = "admin" //(13)!
                firstname = "Ivan" //(14)!
                lastname = "Ivanov" //(15)!
                email = "admin@mail.ru" //(16)!
            }
            telemetry {
                logging {
                    enabled = false //(17)!
                    stacktrace = true //(18)!
                }
                metrics {
                    enabled = true //(19)!
                    slo = [ 1, 10, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 30000, 60000, 90000 ] //(20)!
                }
                engineTelemetryEnabled = false //(21)!
                tracing {
                    enabled = true //(22)!
                }
            }
        }
    }
}
  1. Минимальное количество живых потоков в JobExecutor
  2. Максимальное кличество потоков в JobExecutor
  3. Размер очереди задачи перед тем как задачи будут выброшены из очереди выполнения JobExecutor
  4. Максимальное количество задач в выполнении JobExecutor (по умолчанию равно кол-во ядер процессора умноженных на 2)
  5. Индетефикатор тенант загрузки ресурсов (по умолчанию отсутсвует)
  6. Имя загрузки ресурсов
  7. Флаг который говорит что следует загружать только измененные ресурсы
  8. Пути для поиска BPMN/FORM/DMN ресурсов которые будут загружены в оркестратор после запуска
  9. Задержда перед тем как начать загрузку новых ресурсов в оркестратор
  10. Включить ли параллельную загрузку которая слегка улучшает скорость запуска оркестратора
  11. Проверять ли не полные запросы настройки оркестратора
  12. Индетификатор администратора Camunda (необязательный)
  13. Пароль администратора Camunda (необязательный)
  14. Имя администратора Camunda (необязательный)
  15. Фамилия администратора Camunda (необязательный)
  16. Email администратора Camunda (необязательный)
  17. Включает логгирование модуля (по умолчанию false)
  18. Включает логгирование стека ошибки (по умолчанию true)
  19. Включает метрики модуля (по умолчанию true)
  20. Настройка SLO для DistributionSummary метрики
  21. Включает сбор метрик/телеметрии оркестратора (по умолчанию false)
  22. Включает трассировку модуля (по умолчанию true)
camunda:
  engine:
    bpmn:
      jobExecutor:
        corePoolSize: 5 #(1)!
        maxPoolSize: 25 #(2)!
        queueSize: 25 #(3)!
        maxJobsPerAcquisition: 2 #(4)!
      deployment:
        tenantId: "Camunda" #(5)!
        name: "KoraEngineAutoDeployment" #(6)!
        deployChangedOnly: true #(7)!
        resources: "classpath:bpm" #(8)!
        delay: "1m" #(9)!
      parallelInitialization:
        enabled: true #(10)!
        validateIncompleteStatements: true #(11)!
      admin:
        id: "admin" #(12)!
        password: "admin" #(13)!
        firstname: "Ivan" #(14)!
        lastname: "Ivanov" #(15)!
        email: "admin@mail.ru" #(16)!
      telemetry:
        logging:
          enabled: false #(17)!
          stacktrace: true #(18)!
        metrics:
          enabled: true #(19)!
          slo: [ 0, 10, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 30000, 60000, 90000 ] #(20)!
        engineTelemetryEnabled: false #(21)!
        tracing:
          enabled: true #(22)!
  1. Минимальное количество живых потоков в JobExecutor
  2. Максимальное кличество потоков в JobExecutor
  3. Размер очереди задачи перед тем как задачи будут выброшены из очереди выполнения JobExecutor
  4. Максимальное количество задач в выполнении JobExecutor (по умолчанию равно кол-во ядер процессора умноженных на 2)
  5. Индетефикатор тенант загрузки ресурсов (по умолчанию отсутсвует)
  6. Имя загрузки ресурсов
  7. Флаг который говорит что следует загружать только измененные ресурсы
  8. Пути для поиска BPMN/FORM/DMN ресурсов которые будут загружены в оркестратор после запуска
  9. Задержда перед тем как начать загрузку новых ресурсов в оркестратор
  10. Включить ли параллельную загрузку которая слегка улучшает скорость запуска оркестратора
  11. Проверять ли не полные запросы настройки оркестратора
  12. Индетификатор администратора Camunda (необязательный)
  13. Пароль администратора Camunda (необязательный)
  14. Имя администратора Camunda (необязательный)
  15. Фамилия администратора Camunda (необязательный)
  16. Email администратора Camunda (необязательный)
  17. Включает логгирование модуля (по умолчанию false)
  18. Включает логгирование стека ошибки (по умолчанию true)
  19. Включает метрики модуля (по умолчанию true)
  20. Настройка SLO для DistributionSummary метрики
  21. Включает сбор метрик/телеметрии оркестратора (по умолчанию false)
  22. Включает трассировку модуля (по умолчанию true)

Исполнители

Регистрировать в Camunda можно как свои JavaDelegate, которые будут зарегистрированы в контексте по своему полному имени класса (canonicalName) так и по упрощенному имени класса (simpleName):

@Component
public final class SimpleDelegate implements JavaDelegate {

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {

    }
}
@Component
class SimpleKoraDelegate : JavaDelegate {

    fun execute(delegateExecution: DelegateExecution) {

    }
}

Так и специализированные KoraDelegate, которые позволяют помимо стандартных именований регистрировать исполнителя с помощью произвольного имени в контексте по средствам метода key():

@Component
public final class SimpleDelegate implements KoraDelegate {

    public String key() {
        return "myKey";
    }

    @Override
    public void execute(DelegateExecution delegateExecution) throws Exception {

    }
}
@Component
class SimpleKoraDelegate : KoraDelegate {

    fun key() = "myKey"

    fun execute(delegateExecution: DelegateExecution) {

    }
}

Донастройка

Можно регистрировать произвольные ProcessEngineConfigurator которые позволяют донастраивать ProcessEngine:

@Component
public final class SimpleProcessEngineConfigurator implements ProcessEngineConfigurator {

    @Override
    public void setup(ProcessEngine engine) {

    }
}
@Component
class SimpleProcessEngineConfigurator : ProcessEngineConfigurator {

    fun setup(engine: ProcessEngine) {

    }
}

Плагины

Можно регистрировать произвольные Plugin предоставляя их как компоненты в контейнер зависимостей.