JMS微服务架构 - 关于事务提交失败,自动重新提交的机制
用JMS编写的微服务,由调用端决定了各个微服务执行时,是否需要保持事务的一致性。
也就是RemoteClient在调用微服务方法前,先调用BeginTransaction明确后面所调用的微服务需要保持事务一致性。
微服务的底层执行流程如下:
调用端---->开启事务强一致性--->调用各个微服务---->向各个微服务确认是否可以提交事务----->通知各个微服务提交事务----->各个微服务各自提交自己的事务(如果提交失败,则自动重复提交)
事务的数据默认保存在$$JMS_RetryCommitPath文件夹
$$JMS_RetryCommitPath文件夹下有以下几种扩展名的文件:
*.txt : 需要提交事务的原请求数据,这些文件会在微服务重启时,自动解析,并重新执行请求和提交事务
*.err : 提交事务失败后保留下来的原请求数据,这些文件会被微服务每隔5秒重新解析,重新执行请求和提交事务
*.timeout : 当一个请求,微服务器由于和调用端失去联系,无法判断是否应该提交事务,就会把原请求数据保存在此,需要人工处理。你如果希望这个请求重新执行,那么,把它的扩张名改为.err即可
*:faild : 重新提交事务失败,保存成此文件,同样需要人工处理。