API REST для запуска экземпляра процесса удерживает запрос до тех пор, пока экземпляр процесса не будет завершен - PullRequest
0 голосов
/ 17 января 2019

Я использую Activiti версии 6.

Я создал BPMN-процесс из activiti-app.
Затем я хочу запустить этот процесс с activiti-rest.war с помощью API.

http://localhost:8080/activiti-rest/service/runtime/process-instances

request body :

 {

   "processDefinitionKey":"cep_dispatch_process",
   "businessKey":"myBusinessKey",
     "returnVariables": false
}

header :
Content-Type:application/json

Как я вижу в журнале, процесс запускается в потоках Tomcat. ссылаясь на последний код GitHub:

Activiti-activiti-6.0.0\modules\activiti-rest\src\main\java\org\activiti\rest\service\api\runtime\process\ProcessInstanceCollectionResource.java

Когда я вижу метод,

@RequestMapping(value = "/runtime/process-instances", method = RequestMethod.POST, produces = "application/json")
  public ProcessInstanceResponse createProcessInstance(@RequestBody ProcessInstanceCreateRequest request, HttpServletRequest httpRequest, HttpServletResponse response) {

Я вижу, что процесс запускается и не ожидает завершения процесса, HTTP-ответ - 201. Я понимаю, что запрос не удерживается для завершения экземпляра процесса.

instance = processInstanceBuilder.start();

response.setStatus(HttpStatus.CREATED.value());

Пожалуйста, обратитесь к журналу, приведенному ниже, я вижу, что процесс выполняется в потоке сервера, и запрос ожидает завершения процесса.

276-DEBUG 17-01-2019 14:12:07,177- (http-nio-8080-exec-3) ExecutionEntityManagerImpl: Child execution Execution[ id '130023' ] - parent '130021' created with parent 130021
241-DEBUG 17-01-2019 14:12:07,178- (http-nio-8080-exec-3) ContinueProcessOperation: Executing boundary event activityBehavior class org.activiti.engine.impl.bpmn.behavior.BoundaryTimerEventActivityBehavior with execution 130023
171-DEBUG 17-01-2019 14:12:07,202- (http-nio-8080-exec-3) ContinueProcessOperation: Executing activityBehavior class org.activiti.engine.impl.bpmn.behavior.SubProcessActivityBehavior on activity 'sid-1A2A8DF5-764A-4960-8E5D-F347DC10207C' with execution 130021
276-DEBUG 17-01-2019 14:12:07,203- (http-nio-8080-exec-3) ExecutionEntityManagerImpl: Child execution Execution[ id '130025' ] - parent '130021' created with parent 130021
63-DEBUG 17-01-2019 14:12:07,203- (http-nio-8080-exec-3) DefaultActivitiEngineAgenda: Operation class org.activiti.engine.impl.agenda.ContinueProcessOperation added to agenda
70-DEBUG 17-01-2019 14:12:07,203- (http-nio-8080-exec-3) CommandInvoker: Executing operation class org.activiti.engine.impl.agenda.ContinueProcessOperation 

Запрос не должен ждать завершения процесса.

Как я могу решить эту проблему, запрос на запуск процесса не должен ждать завершения экземпляра процесса.

Как вы видите в ответе ниже:

{"id":"130028",
"url":"http://localhost:8080/activiti-rest/service/runtime/process-instances/130028",
"businessKey":"myBusinessKey",
"suspended":false,
"ended":true,
"processDefinitionId":"cep_dispatch_process:13:125033",
"processDefinitionUrl":"http://localhost:8080/activiti-rest/service/repository/process-definitions/cep_dispatch_process:13:125033"
,"processDefinitionKey":"cep_dispatch_process",
"activityId":null,
"variables":[],
"tenantId":"",
"name":null,
"completed":true
}

API возвращается только после завершения процесса, я добавляю задержку в 2 минуты в служебную задачу, я вижу, что запрос будет ждать.

1 Ответ

0 голосов
/ 21 января 2019

Я не большой гуру в Activiti, но в качестве простейшего решения я могу предложить активировать Async executor и использовать Асинхронные продолжения для вашей служебной задачи. Это может решить вашу проблему. Поведение Activiti ожидается, потому что до тех пор, пока оно не сохранит состояние в БД, он не может точно сказать, что процесс создан (поскольку транзакция может быть откатана, например, из-за ошибки БД)

...