同步节点和异步节点
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
,则会单独执行和回滚。
参考:
网友评论