服务端定时任务扫描器
更新超时状态
查询出【已完成但未标记DONE状态的】超时记录;
更新超时记录为完成状态;
查找超时事件
查询(未完成的)超时事件;
保存超时记录;
终止超时时间
查询【NEW状态】且【已超时的】超时记录,未超时的超时记录将不做处理;
更新【已超时的】超时记录为【PENDING】状态;
查找需补偿事件,保存未补偿命令
查询需补偿事件(即超时异常的和普通异常的) 按照从左到右的顺序,优先排除过滤较多的条件;从未结束(即无【SagaEndedEvent】状态)的最小事件开始查询;含发生异常的;排除已补偿的;排除重试的;依据唯一标识升序;
保存未补偿命令;
执行补偿
查找状态为NEW的Command;
更新状态为NEW的Command的状态为PENDING;
调用客户端的补偿方法;
更新已补偿命令
查找已补偿但未结束的事件;
更新补偿状态为DONE;