(在集群环境,可能会使用多个线程池)
产生一致性问题:
考虑一下服务任务后的汇聚:当服务任务完成后,到达并发汇聚节点,需要决定是等待其他分支,还是继续向下执行
就是说,对每个到达并行汇聚的分支,都需要判断是继续还是等待其他分支的一个或多个分支...:
如果出现了这个问题,这些事务是互相不可见的,其他事务同时到达了相同的并发汇聚,假设都在等待其他分支
然而,每个事务都假设在等待其他分支,所以没有分支会越过并发汇聚继续执行,流程实例会一直在等待状态...,其他分支会因为乐观锁导致失败
因为流程是被job触发的,Activiti会尝试在等待一段时间后尝试执行同一个job,这段时间可以同步网关的状态
Activiti乐观锁是一个很好的解决方案吗?...:如果“预定演唱会门票”服务没有与Activiti共享事务,重试job可能导致我们预定了过多门票
针对这些问题,在Activiti中推出了新的概念:排他job
排他Job
对于一个流程实例,排他任务不能同时执行两个....所有其他流程实例的job也会分配给其他线程同步执行
意味着虽然Activiti不会同时执行一个流程实例的排他job,但是还会同步执行多个流程实例的异步执行
通过一个总体的预测,在大多数场景下,排他任务都会让单独的实例运行的更迅速