0
问题描述:saga模式时,客户端调用两个服务,这两个服务都有补偿服务,例如: A服务 -- 补偿服务为 AU B服务 -- 补偿服务为 BU Seata服务为远程服务模式。客户端运行时,根据流程定义先执行A服务,再执行B服务,此时B服务出现异常,根据流程定义如果触发异常则触发补偿,即开始执行BU服务,然后再执行AU服务。这是正常流程。如果在执行BU服务还有没有结束时,强制停止运行(模拟挂机),此时BU这个补偿服务在seata_state_inst表里的记录的gmt_end为null,接下来再重新运行客户端时,seata服务会远程触发二阶段回滚,二阶段回滚成功后,我再调用如下代码:
String instancdID = stateMachineEngine.getStateMachineConfig().getStateLogStore().
getStateMachineInstanceByBusinessKey(businessKey, null).getId();
会导致如下异常:
分析原因知道是由于代码里没有判断gmt_end=null的情况,下方代码错误位置如下: