Activiti中的同步节点和异步节点

同步节点和异步节点

service task和 user task中都会有一个Asynchronous的复选框,这个Async有什么区别呢?
参考Synchronous vs. Asynchronous Service Invocations - BPMN Service Task,可以理解为,

  • 同步节点:类似同步调用,调用者都是流程引擎,服务提供方是userTask, serviceTask,同步节点是流程引擎在执行Task时,一直等待Task执行完才返回。
  • 异步节点:流程引擎将异步节点的请求都构造出来,放到一个待执行队列中,由request Processor执行,执行完之后将结果通过回调的方式返回给流程引擎。

如果某一个节点,依赖于上一个节点的返回结果,那这个节点需要是同步节点,否则可以是异步节点。

以下是2017.12.27更新


对于serviceTask而言,是否设置asynchronous并不是看“是否依赖于上个节点的返回结果”(上边删除线标记的部分),而是要看这个节点是否要跟上一个节点在同一个事务中
事务(transaction)可以保证在某一个activity发生异常后可以回滚。activiti的很多对于DB的操作并不会直接写库,而是在遇到wait status节点后才submit
那什么才是wait status节点呢,手册给出说明,等待状态就是让流程"过一会之后"再执行的节点,遇到这类节点,activiti流程会把当前执行结果持久化,并等待流程被下一次触发。(A wait state is a task which is performed "later" which means that Activiti persists the current execution and waits to be triggered again.)。定时器Timer、异步Task节点都是“等待状态”的节点。
也就是说,如果你设置了任务是“同步”的,则如果发生异常之后,会回滚到上一个处于“等待状态”的节点处。如果设置了asynchronous,则会单独执行和回滚。

参考:

  • activiti-user-guide, 8.7.1. Asynchronous Continuations

你可能感兴趣的:(工作流引擎)