如果在多个服务中需要对不同的数据库进行操作。
因为不同服务操作的数据库都不同,所以保证在同一个事务中完成操作显然是不科学的。
那实现分布式事务的思想:
1》 方法入口,创建一条日志记录,状态定义为初始状态,即保存本条日志记录【可以保存在数据库中,也可以写出到本地磁盘文件】
2》 可以在异步线程或在定时任务中,去读取日志表中,是否有满足条件的日志需要处理【同时为了放置多个示例开启多个定时任务,可以将定时任务放入redis,保证同一时刻只有一个定时任务在执行】
3》 如果有需要处理的任务,先取出本条日志,然后分别对不同服务进行处理,哪一个服务处理完成,就设置本服务对应的状态为成功标志
4》 只有所有服务对应标志都成功,才表示次服务最终完成【定时任务完成的同时删除redis中的定时任务,定时任务完成不代表服务最终完成,有可能是其中一个服务成功,另一个服务结束】
以此来实现分布式事务的思想。
示例代码:
跳转到示例代码: