如何在 camunda 中建模异步服务任务并在 spring 引导中实现它
How to model async service task in camunda and implement it in spring boot
我在 spring 启动应用程序中使用 Camunda 作为 bpmn 引擎
主要思想:
第一个进程在控制器中启动,响应返回给客户端后,第二个进程应该启动。
我使用 @Async(spring framework) 来启动第二个进程,我有两个 bpmn 图:
firstProcess
secondProcess
想法的简单实现:
@RestController
public class SimpleController {
@Autowired
private CustomService asyncService;
@Autowired
private CustomService syncService;
@GetMapping(value = "/request")
public ResponseEntity<String> sendQuestion() {
//start process described in first.bpmn
syncService.startProcess("firstProcess");
//start process described in second.bpmn asynchronously
//controller responses to client without waiting for ending secondProcess
asyncService.startProcess("secondProcess");
return new ResponseEntity<>("OK", HttpStatus.OK);
}
}
@Service
public class AsyncService implements CustomService {
@Autowired
private RuntimeService runtimeService;
@Async
public void startProcess(String key) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
//
}
runtimeService.startProcessInstanceByKey(key);
}
}
问题:
有没有办法在一个过程中完成这两个过程(如两个过程所示)?
我应该如何在 spring 启动应用程序中实现它?
bothProcess
您需要使用 Call Activity Task
将 BPMN
指定为 CallActivity Type
并在属性面板的 Called Element
字段中指定相应的进程 ID。
也不要忘记取消选中子流程的 Startable
复选框。
我在 spring 启动应用程序中使用 Camunda 作为 bpmn 引擎
主要思想: 第一个进程在控制器中启动,响应返回给客户端后,第二个进程应该启动。 我使用 @Async(spring framework) 来启动第二个进程,我有两个 bpmn 图: firstProcess secondProcess
想法的简单实现:
@RestController
public class SimpleController {
@Autowired
private CustomService asyncService;
@Autowired
private CustomService syncService;
@GetMapping(value = "/request")
public ResponseEntity<String> sendQuestion() {
//start process described in first.bpmn
syncService.startProcess("firstProcess");
//start process described in second.bpmn asynchronously
//controller responses to client without waiting for ending secondProcess
asyncService.startProcess("secondProcess");
return new ResponseEntity<>("OK", HttpStatus.OK);
}
}
@Service
public class AsyncService implements CustomService {
@Autowired
private RuntimeService runtimeService;
@Async
public void startProcess(String key) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
//
}
runtimeService.startProcessInstanceByKey(key);
}
}
问题: 有没有办法在一个过程中完成这两个过程(如两个过程所示)? 我应该如何在 spring 启动应用程序中实现它? bothProcess
您需要使用 Call Activity Task
将 BPMN
指定为 CallActivity Type
并在属性面板的 Called Element
字段中指定相应的进程 ID。
也不要忘记取消选中子流程的 Startable
复选框。