背景
- 在activiti中,每个节点(user task)都可以理解为activity。 那这个activity是怎么执行的?也可以理解为程序代码在执行complete时,发生了什么?
- 什么又是 Asynchronous Continuations?
- 为什么需要Asynchronous Continuations?
过程
-
complete
- 流程进入到activity时,"TAKE"监听器就会被调用。
- activity自己调用"START"监听器。
- activity的行为将会被执行。
- 当activiy的行为执行完成后。"END"监听器将会被activity调用。
- 流程离开activity时,"TAKE"监听器会被调用。
- Asynchronous Continuations 理解
-
一个activity执行过程中,上述的5个步骤,都是丢给job executor线程池执行的。但是都是连续的,都是上个监听器执行完成后,下一个监听器又开始执行,他们虽然是异步执行的,但是都是连续的,理解起来,就是针对同一个activity的同步操作。
-
还有一种情况就是如下图所示这样。流程定义图上有多个节点。当taskService.complete(id)执行完成后,相关数据其实已经持久化到数据中了。后续的Generate invoice 和 Send invoice to customer都是在taskService.complete(id)执行之后,必须要执行的,而且这个异步操作一定是上一个事务的延续。因为上一个事务已经提交了,数据库持久化了数据,因此能够保证后续的事务一定是没有任何问题的。
-
为什么需要Asynchronous Continuations?
就是上一个异步中的事务一定是发生在下一个事务之前的。并且,上一个事务是提交了的,数据库持久化了数据。把业务逻辑丢到异步中执行,但是前后保证了异步的延续性。 - 异步延续性,一定是Job executor执行的。
小结
-
理解activity的工作过程。
-
理解设计Asynchronous Continuations意义。
-
知道Asynchronous Continuations的相关逻辑都是在job executor中执行的。