本发明涉及微服务,具体涉及一种基于注解的多事务补偿方法与系统。
背景技术:
1、伴随着微服务的架构盛行,目前无论是跨服务之间的调用还是单个业务动作内串行的使用多个业务越发的频繁出现,由此引发数据一致性问题也更是越来越严峻。
2、现有的多事务处理的技术不足如下:
3、(1)通过引入seata实现全局事务的一致性管控,但是目前只提供对事物的全局回滚处理并不支持异步重试机制;
4、(2)通过补偿的方式实现最终的一致性,对于开发者而言较为笨重需要手写补偿逻辑业务。
技术实现思路
1、针对上述提到的技术问题,本申请的实施例的目的在于提出了一种基于注解的多事务补偿方法与系统,在引入seata的前提下能够实现对全局回滚后的异步重试补偿,满足多事务的数据一致性需求。
2、第一方面,一种基于注解的多事务补偿方法,包括以下步骤:
3、接收重试请求;
4、分批次从待补偿表中获取对应服务的待补偿reqid集合;
5、将从待补偿表中获取的reqid及异常作为查询条件,从详情表中获取同一个reqid事务下最低的顺序计数器文档详情;
6、基于最低的顺序计数器文档详情,获取对应的详情表中的方法参数以及对应的方法信息,通过反射获取对应的代理类信息;
7、将发起补偿的reqid集合存入数据库;
8、执行对应方法信息,基于注解环绕通知判断出是补偿请求时,生成更新文档。
9、优选的,所述重试请求通过定时任务触发。
10、优选的,分批次从待补偿表中获取对应服务的待补偿reqid集合之前,还包括:
11、从配置中读取重试开关状态以及多个服务的自动化补偿设置;
12、当重试开关为开启且当前服务有设置自动化补偿时,分批次从待补偿表中获取对应服务的待补偿reqid集合。
13、优选的,所述待补偿表和详情表中数据产生方法包括:
14、接收服务发送的前端请求;
15、生成对应的reqid和当前程序版本号;
16、通过aop拦截自定义的注解与seata声明全局事务的gloabletransation;
17、判断注解环绕通知是否有抛出异常,如果有,输出异常抛出通知;
18、如果本次拦截到的请求的reqid不在发起补偿的reqid集合中,根据reqid使用计数器记录流转顺序;
19、如果没有抛出异常,基于详情信息生成第一批量插入文档信息;如果有抛出异常,基于详情信息生成第一批量插入文档信息,同时基于待补偿信息生成第二批量插入文档信息;所述详情信息包括reqid、调用顺序计数器、事务名、方法名、路径、方法参数、是否异常、备注、版本号、插入时间和修改时间;所述待补偿信息包括从异常抛出通知中获取的待补偿数据、reqid、服务名和插入时间;
20、将第一批量插入文档信息和/或第二批量插入文档信息存入本地缓存,并在满足落盘条件时,进行数据落盘,将详情信息存储至详情表,将待补偿信息存储至待补偿表。
21、优选的,在满足落盘条件时,进行数据落盘,具体包括:
22、判断队列占用空间大小是否超出第一阈值;如果是,满足落盘条件,进行数据落盘;
23、判断队列大小是否超出第二阈值;如果是,满足落盘条件,进行数据落盘;
24、判断定时刷新的定时任务是否启动;如果是,满足落盘条件,进行数据落盘;
25、判断服务程序是否停止;如果是,满足落盘条件,进行数据落盘。
26、优选的,执行对应方法信息,基于注解环绕通知判断出是补偿请求时,生成更新文档,具体包括:
27、接收执行对应方法信息时发送的前端请求;
28、生成对应的reqid和当前程序版本号;
29、通过aop拦截自定义的注解与seata声明全局事务的gloabletransation;
30、如果本次拦截到的请求的reqid在发起补偿的reqid集合中,基于reqid、方法名、路径、是否异常、版本号、插入时间和修改时间生成更新文档;
31、将更新文档存入本地缓存,并在满足落盘条件时,进行数据落盘。
32、优选的,基于reqid、方法名、路径、是否异常、版本号、插入时间和修改时间生成更新文档之后,还包括:批量删除需从待补偿表删除的数据。
33、第二方面,一种基于注解的多事务补偿系统,包括:
34、请求接收模块,用于接收重试请求;
35、待补偿reqid集合获取模块,用于分批次从待补偿表中获取对应服务的待补偿reqid集合;
36、文档查询模块,用于将从待补偿表中获取的reqid及异常作为查询条件,从详情表中获取同一个reqid事务下最低的顺序计数器文档详情;
37、信息获取模块,用于基于最低的顺序计数器文档详情,获取对应的详情表中的方法参数以及对应的方法信息,通过反射获取对应的代理类信息;
38、待补偿reqid存储模块,用于将发起补偿的reqid集合存入数据库;
39、重试执行模块,用于执行对应方法信息,基于注解环绕通知判断出是补偿请求时,生成更新文档。
40、第三方面,一种电子设备,包括:
41、一个或多个处理器;
42、存储器,用于存储一个或多个计算机程序,
43、当所述一个或多个计算机程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现所述的基于注解的多事务补偿方法。
44、第四方面,一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现所述的基于注解的多事务补偿方法。
45、相比于现有技术,本发明具有以下有益效果:
46、(1)对于可以通过修复异常代码后重置执行来显示数据一致性的逻辑函数,本发明能够实现自动重试补偿从而减少了代码的开发量;
47、(2)本发明能够通过开关的配置方式对指定服务进行自动重试补偿,满足用户的多样化需求;
48、(2)本发明实现了对程序内的核心业务逻辑的监控,在有需求的前提下可以建立程序流转状态监控;
49、(3)本发明在引入seata的前提下也可以实现对全局回滚后的异步重试补偿。
1.一种基于注解的多事务补偿方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于注解的多事务补偿方法,其特征在于,所述重试请求通过定时任务触发。
3.根据权利要求1所述的基于注解的多事务补偿方法,其特征在于,分批次从待补偿表中获取对应服务的待补偿reqid集合之前,还包括:
4.根据权利要求1所述的基于注解的多事务补偿方法,其特征在于,所述待补偿表和详情表中数据产生方法包括:
5.根据权利要求4所述的基于注解的多事务补偿方法,其特征在于,在满足落盘条件时,进行数据落盘,具体包括:
6.根据权利要求1所述的基于注解的多事务补偿方法,其特征在于,执行对应方法信息,基于注解环绕通知判断出是补偿请求时,生成更新文档,具体包括:
7.根据权利要求6所述的基于注解的多事务补偿方法,其特征在于,基于reqid、方法名、路径、是否异常、版本号、插入时间和修改时间生成更新文档之后,还包括:批量删除需从待补偿表删除的数据。
8.一种基于注解的多事务补偿系统,其特征在于,包括:
9.一种电子设备,包括:
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
