【技术实现步骤摘要】
一种基于AOP+ThreadLocal技术的分布式系统断点重试方法
[0001]本专利技术属于软件信息
,具体涉及一种基于AOP+ThreadLocal技术的分布式系统断点重试方法。
技术介绍
[0002]在业务系统中,因为网络或者异常数据等一些原因,程序会发生异常,在失败后如何保持交易的原子性和一致性是需要着重考虑的一个问题。
[0003]在单体架构中,因为只有涉及到一个应用,解决以上原子性和一致性问题,只需要开启声明式事务管理就可以了。在分布式架构中实现原子性和一致性首先想到的是通过分布式事务来实现,分布式事务方案包括:XA、TCC、本地消息表、可靠消息最终一致性等。我们较为熟悉的开源分布式事务框架:Seata,其包含AT模式、TCC模式、sage模式、XA模式。还有蚂蚁金服黑科技:DTX,其包含TCC模式、FMT托管模式、XA模式。
[0004]以上方案可以解决分布式一致性问题,但是或多或少需要引入其他中间件,或者部署额外的服务,或者部署一个分布式事务协调中心来实现。但是对于中小型公司而言引入中间件需要专项团队来维护其稳定性,部署额外的服务也需要人力去维护。
[0005]所以对于大部分的分布式接口调用,如果使用分布式事务很繁琐,直接就是监控、记录日志、事后快速的定位排查问题、通过重试来保证业务最终执行成功。
[0006]在发生异常时,一般主要涉及三种业务场景,1)在业务流程入口处直接中断了;2)在业务流程执行中途中断,但是此时只执行了一些查询操作没有任何修改操作;3)在业务 ...
【技术保护点】
【技术特征摘要】
1.一种基于AOP+ThreadLocal技术的分布式系统断点重试方法,其特征在于,包括如下步骤:步骤1:通过AOP切面表达式指定需要支持断点重试的方法并定义所有方法的OperationType;步骤2:在需要支持断点重试的业务流程中开启断点重试;步骤3:在发生异常后,持久化已经执行成功的方法返回值;步骤4:清空ThreadLocal变量,防止内存溢出。2.根据权利要求1所述的一种基于AOP+ThreadLocal技术的分布式系统断点重试方法,其特征在于,所述步骤1具体包括:步骤1.1:借助AspectJ插件,通过其中的@PointCut注解来指定切面;步骤1.2:通过execution、@annotation函数名称进行匹配,或是通过args、@args方法参数进行匹配,或是通过within、target类名来进行匹配;步骤1.3:指定之后,AOP通过动态代理技术,对于所指定的方法进行环切,在方法执行前做重试的判断,或是在方法执行之后获取执行结果,并获取返回值。3.根据权利要求2所述的一种基于AOP+ThreadLocal技术的分布式系统断点重试方法,其特征在于,在已经指定的方法中,如果想要支持忽略查询方法断点重试,需要在方法中加入此方法的操作类型注解@OperationType,反之则默认为更新交易。4.根据权利要求3所述的一种基于AOP+ThreadLocal技术的分布式系统断点重试方法,其特征在于,如果为查询操作则指定@OperationType(value=“query”),如果为更新操作则指定@OperationType(value=“update”)。5.根据权利要求1所述的一种基于AOP+ThreadLocal技术的分布式系统断点重试方法,其特征在于,所述步骤2具体包括:步骤2.1:对于业务流程F开启断点重试,只需要调用supportRetry()方法,其中如果重试标识为false,则是正常交易流程,进行正常逻辑处理;如果重试标识为true,则是重试交易流程,进行重试逻辑处理。6.根据权利要求5所述的一种基于AOP+ThreadLocal技术的分布式系统断点重试方法,其特征在于,所述步骤2.1中为正常交易交易,处理流程具体为:(1)程序将以上几个参数放入ThreadLocal变量inputThreadLocal;(2)在业务流程执行过程中,假设执行到方法m1,那么首先判断程序通过inputThreadLocal是否为空,如果为空,说明开启了断点重试,如果不为空则说明没有开启断点重试,如果开启了断点重试,那么从inputThreadLocal中获取当前线程的入参信息,判断重试处理标识;(3)判断重试处理标识是为false,则首先通过代理类执行实际方法,获取返回结果和返回值信息,判断结果为成功,则继续判断是否为查询交易,如果是忽略查询方法==true&&@OperationType(value=“query”),则不保存方法结果信息,否则将结果...
【专利技术属性】
技术研发人员:徐海洋,
申请(专利权)人:四川新网银行股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。