2016-07-26 3 views
1

Использование Camunda в качестве инструмента для оркестровки микросервисов. В более позднее время я обнаружил, что process_instances_id создан для продолжения определенного процесса, используя его в messageEventReceived(). Код выглядит следующим образом:Каков правильный способ сохранения созданных экземпляров экземпляра процесса?

val processid = getProcessID(key1, key2) 
val runtimeService = processengine.getRuntimeService 
val subscription = runtimeService.createEventSubscriptionQuery 
    .eventType("message") 
    .eventName(eventname) 
    .processInstanceId(executionid) 
    .singleResult 
runtimeService.messageEventReceived(subscription.getEventName, subscription.getExecutionId) 

В этот момент ProcessID сохраняется, а затем извлекается из базы данных, используя getProcessID (...) функции при необходимости. Это правильно?

Имеет ли camunda уже список process_ids в своей собственной базе данных? Если да, то каким образом я могу получить конкретный идентификатор экземпляра процесса, просто предоставляя составной ключ (ы)? Возможно ли это?

ответ

0

Вы можете использовать

runtimeService.createProcessInstanceQuery().list(); 

запрос поддерживает беглые критерии фильтрации, например, на process_key, переменных businessKey ...

1

Это распространенный способ. Вы также можете использовать public api, чтобы получить экземпляр процесса и его идентификатор с помощью ключа определения процесса.

Смотрите следующий пример из documentation:

runtimeService.createProcessInstanceQuery() 
    .processDefinitionKey("invoice") 
    .list(); 

Для вашего данного примера есть и более простой способ. Возможно сопоставить сообщение через службу времени выполнения.

Смотрите этот пример из documenation:

runtimeService.createMessageCorrelation("messageName") 
    .processInstanceBusinessKey("AB-123") 
    .setVariable("payment_type", "creditCard") 
    .correlate();