SWF Flow工作流@Execute方法调用机制及首次启动同步异步规则
核心结论
外部客户端首次触发工作流启动的调用默认是异步处理模式,不存在「本次调用返回成功即可确认工作流可靠启动」的同步保证。
具体逻辑说明
- 首先要明确链路边界:客户端发起的工作流启动请求,只会完成两个动作就返回:一是在服务端持久化层写入初始工作流元数据记录,二是生成该工作流对应的首个decision task推入调度队列。这一步返回成功,仅代表启动请求被服务端持久化接收,完全没有触达
@Execute注解标注的工作流执行逻辑。 @Execute方法的实际调用,完全是work worker侧的独立行为:只有当worker从调度队列拉取到对应decision task时,才会触发该方法执行(首次启动是执行初始化逻辑,后续是结合历史重放),这个执行环节和客户端的初始启动调用不在同一个同步调用链路里,二者完全解耦。- 也就是说,哪怕客户端拿到了启动接口的成功返回,后续依然可能出现worker执行
@Execute方法抛错、决策任务调度异常、工作流初始化校验不通过等问题导致工作流启动失败,这类后续错误不会同步返回给初始调用的客户端。 - 如果需要确认工作流是否可靠启动,不能依赖启动接口的同步返回结果,必须通过工作流ID主动查询运行状态,或者提前配置工作流状态变更的事件回调接收通知。
注意不要混淆两个执行场景:不管是首次启动执行
@Execute,还是后续重放执行@Execute,触发方都是拉取到决策任务的worker,和外部客户端的启动调用没有同步阻塞关系,客户端从来不会直接调用@Execute方法。
内容的提问来源于stack exchange,提问作者voldegaur
相关产品推荐
相关产品推荐

