一种用于业务处理异常时重试的方法与设备与流程

文档序号:29626727发布日期:2022-04-13 14:39阅读:130来源:国知局
一种用于业务处理异常时重试的方法与设备与流程

1.本技术涉及计算机技术领域,尤其涉及一种用于业务处理异常时重试的技术。


背景技术:

2.对于业务处理的异常重试,现有的技术方案通常时在异常的业务处理的线程内进行多次重试,但该方式只能在该线程的生命周期内进行,一旦该线程被误中止或出现停机故障等情况,该业务处理的重试过程就被打断,且无法恢复;另一种现有的异常重试方案基于消息队列实现,在该方案中,当业务处理发生异常后,即向消息队列写入该业务处理的重试消息,并监听消费该重试消息,以达到重试的目的,但该方式将所有业务处理的重试过程进行了统一,难以配置灵活的重试策略。同时,当业务处理重试多次仍无法恢复正常时,上述两种方案都无法实现人工干预,导致大量系统资源的浪费。


技术实现要素:

3.本技术的目的是提供一种用于业务处理异常时重试的方法与设备。
4.根据本技术的一个方面,提供了一种用于业务处理异常时重试的方法,其中,所述方法包括:
5.对出现异常时需重试的业务处理添加重试注解;
6.若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库;
7.根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。
8.优选地,其中,所述若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库包括:
9.若具有所述重试注解的业务处理出现异常,按照预设的线程重试次数对所述业务处理进行线程内的重试;
10.当线程内重试失败,将所述业务处理的执行信息封装为一个重试任务存入数据库。
11.进一步地,其中,所述重试注解包括预设重试次数和预设重试间隔,所述根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试包括:
12.根据所述预设重试次数和所述预设重试间隔为所述数据库中对应的重试任务设置属性信息;
13.基于预设的时间间隔扫描数据库中的重试任务,并基于所述重试任务中的所述属性信息及所述执行信息执行对应的重试任务,以实现对该业务处理的重试。
14.优选地,其中,所述重试注解还包括异常类型标记,其中,所述若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库包括:
15.若具有所述重试注解的业务处理出现异常,其中,所述异常为所述异常类型标记中包含的异常时,将所述业务处理的执行信息封装为一个重试任务存入数据库。
16.优选地,其中,所述重试注解还包括时效时间,其中,所述根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试包括:
17.在所述时效时间内,根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。
18.进一步地,其中,所述方法还包括:
19.当每次业务处理的重试执行完毕,更新其对应的重试任务中的属性信息,其中,所述属性信息用以判断是否调用本次扫描的重试任务对应的业务处理。
20.进一步地,其中,所述重试注解在spring框架下以注解的形式设置在所述业务处理中,并作为切点引入对业务处理的异常重试。
21.优选地,其中,所述方法还包括:
22.在所述业务处理的重试过程中,获取控制指令,以通过所述控制指令控制所述业务处理的重试状态处于暂停、恢复或终止中的任一项。
23.进一步地,其中所述执行信息包括该业务处理的类名、方法名、参数内容。
24.根据本技术的另一方面,还提供了一种计算机可读介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现如前述方法的操作。
25.根据本技术的再一方面,还提供了一种用于业务处理异常时重试的设备,其中,该设备包括:
26.一个或多个处理器;以及
27.存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行上述方法的操作。
28.与现有技术相比,本技术通过对出现异常时需重试的业务处理添加重试注解;若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库;根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。通过此方式,实现了可停机应用的异常重试,在系统恢复正常运行后,可继续此前对业务处理进行的异常重试过程,避免了由于服务器停机或其他系统异常导致的异常重试过程无法恢复,大大增强了对业务处理进行异常重试的灵活性。
附图说明
29.通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
30.图1示出根据本技术一个方面的一种用于业务处理异常时重试的方法流程图;
31.图2示出根据本技术一个优选实施例的一种用于业务处理异常时的方法流程图。
32.附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
33.下面结合附图对本发明作进一步详细描述。
34.在本技术一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个
处理器(cpu)、输入/输出接口、网络接口和内存。
35.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
36.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
37.为更进一步阐述本技术所采取的技术手段及取得的效果,下面结合附图及较佳实施例,对本技术的技术方案,进行清楚和完整的描述。
38.图1示出本技术一个方面提供的一种用于业务处理异常时重试的方法,其中,该方法包括:
39.s11对出现异常时需重试的业务处理添加重试注解;
40.s12若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库;
41.s13根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。
42.在该实施例中,在所述步骤s11中,对出现异常时需重试的业务处理添加重试注解。
43.在该步骤中,可有针对性地对全部业务处理进行筛选,对于出现异常时需要进行停机保护或需要设置灵活的重试策略的业务处理添加重试注解。在实际应用场景中,并非所有的异常都可通过异常重试解决,例如当业务处理发生类型强制转换异常、空指针异常、数组越界异常等常见的异常时,需对该业务处理进行具体的修正,无法通过异常重试解决。此外,也并非所有可通过重试解决的异常都需进行停机保护或设置灵活的重试策略,例如,某些业务处理的异常可通过线程内的重试解决,或者某些业务处理的异常重试不需部署有针对性的重试策略,只需通过基于队列的统一异常重试即可解决。因此,有必要对业务处理进行区分,使得在系统运行过程中,能自动识别需要进行停机保护或需要设置灵活重试策略的业务处理,并对此类业务处理进行本技术的异常重试操作。对此,基于重试注解即可实现上述目标,即对于通常需要较多次重试才能恢复、停机后仍需继续此前的重试过程、或需要有针对性的设置灵活重试策略的业务处理,添加重试注解,进行本技术的基于数据库实现的异常处理方法。
44.在该实施例中,在所述步骤s12中,若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库。
45.在该步骤中,当被重试注解标记的业务处理在执行过程中出现了异常,也即所述具有重试注解的业务处理出现了异常,则提取该业务处理的执行信息。在此,所述重试注解
具有筛选功能,只对具有重试注解的业务处理进行基于数据库实现的异常重试。其中,所述执行信息包括该业务处理的类名、方法名及参数内容。在此,根据类名、方法名可确定唯一的业务处理,根据业务处理及参数内容可还原该业务处理在出现异常时的操作,因此,通过提取包括类名、方法名及参数内容在内的执行信息,即可在需要时对该业务处理进行重试。
46.继续在该步骤中,将该业务处理的执行信息存入数据库。在此,由于对执行信息进行了保存,因此,若该业务处理的重试过程被意外打断,例如出现了停机或其他系统故障,在系统恢复后,仍可调用数据库中的执行信息,对系统故障前的业务处理异常继续进行重试,由此实现了异常处理的停机应用,大大节约了系统资源,简化了后端的维护操作。同理,也可将执行信息保存在链表、数组、区块链等结构中。应明确,本方案中将执行信息存入数据库的方式仅为举例,其他对执行信息进行保存以实现停机应用的方法,均在本技术的保护范围内。
47.继续在该步骤中,将保存在数据库中的该业务处理的执行信息封装为一个重试任务。在此,将每一个需要进行异常重试的业务处理的执行信息封装为一个重试任务,当需要进行异常重试时,访问数据库中对应的重试任务即可,不必在数据库中分别搜索该业务处理对应的类名、方法名及参数内容,节约了系统操作及时间成本,并可在该重试任务中设置其他的重试内容,实现灵活且有针对性的重试策略。
48.继续在该步骤中,优选地,所述重试注解还包括异常类型标记,其中,所述若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库包括:若具有所述重试注解的业务处理出现异常,其中,所述异常为所述异常类型标记中包含的异常时,将所述业务处理的执行信息封装为一个重试任务存入数据库。
49.在此,可在重试注解中添加具体字段,例如添加字段对异常类型进行限定,也即在重试注解中添加异常类型标记,该标记表明只对出现此异常的业务处理进行基于数据库的异常重试,该标记可以仅限定一种异常类型,例如,在实际应用场景中,某业务处理只对网络中断的异常进行重试,则可将重试注解中的异常类型标记定义为网络中断异常标记;该标记也可限定为几种异常类型,例如,在实际应用场景中,某业务处理对网络中断以及调用超时异常进行重试,则可将异常重试注解中的异常类型标记定义为网络中断及调用超时标记。当具有重试注解的业务处理发生的异常包含在异常标记类型中,则把该业务处理的类名、方法名及参数内容作为执行信息,封装为重试任务并保存在数据库中。通过设置异常类型标记的方式,对进行异常重试的具体异常类型进行了限定,实现了更灵活且有针对性的异常重试。
50.在该实施例中,在步骤s13中,根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。
51.在此,根据数据库中该业务处理对应的重试任务中的执行信息确定异常重试的对象和内容,而所述重试注解除具有标记筛选的作用外,还可添加其他重试内容,用以确定进行异常重试的时机。
52.在该步骤中,进一步地,所述重试注解包括预设重试次数和预设重试间隔。在此,所述重试注解除了具有筛选需进行异常重试的业务处理的功能外,还可添加具体的重试内容,由于每个需重试的业务处理都具有各自的重试注解,因此,可有针对性地为不同的业务处理设置不同的重试策略。例如,某重试注解中的异常类型标记指定的异常类型在进行一
次重试时需要较长的时间,则对于该业务处理,可将重试注解中的重试间隔设置的较长,以此保证在该时间间隔内可充分完成一次重试过程,避免由此产生的线程混乱。
53.当重试注解包括预设重试次数和预设重试间隔时,所述根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试包括:根据所述预设重试次数和所述预设重试间隔为所述数据库中对应的重试任务设置属性信息;基于预设的时间间隔扫描数据库中的重试任务,并基于所述重试任务中的所述属性信息及所述执行信息执行对应的重试任务,以实现对该业务处理的重试。
54.在此,所述重试注解包括重试次数和重试间隔,则通过预设的重试次数和重试间隔为业务处理对应的重试任务添加属性信息。例如,所述重试任务的属性信息可包括最大重试次数及下次重试时间,则所述根据所述预设重试次数和预设重试间隔为所述数据库中对应的重试任务设置属性信息包括:将预设重试次数设置为属性信息中的最大重试次数、将预设重试间隔与当前时间加和作为属性信息中的下次重试时间。
55.在为重试任务设置属性信息后,基于预设的时间间隔扫描数据库中的重试任务,并基于所述重试任务中的所述属性信息及所述执行信息执行对应的重试任务。在此,可自定义时间间隔,定期对数据库中的重试任务进行扫描,监测各个重试任务中的属性信息,当该重试任务的最大重试次数不为0且本次扫描的时间点已经到达属性信息中的下次重试时间,则基于该重试任务中的执行信息对其对应的业务处理进行调用,以此实现对该业务处理的重试。在此,自定义的时间间隔应远小于业务处理的重试间隔,以保证业务处理的每个重试时机都能被捕获到。
56.当每次业务处理的重试执行完毕,更新其对应的重试任务中的属性信息。在此,继续以属性信息包括最大重试次数及下次重试时间的方案为例:若经过本次重试,该业务处理仍异常,则将最大重试次数减1、将下次重试时间更新为重试注解中的重试间隔与本次重试时间的加和;若经过本次重试,该业务处理无异常,则将最大重试次数更新为0。应明确,该实施例中属性信息为最大重试次数、下次重试时间与其设置及更新的方式仅为举例,任何能由重试注解确定的,可捕获业务处理重试时机并进行更新的属性信息设置方案均在本技术的保护范围中。
57.优选地,所述重试注解还包括时效时间,其中,所述根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试包括:在所述时效时间内,根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。
58.在此,在一个优选的实施例中,所述重试注解包括重试次数、重试间隔及时效时间。该优选实施例通过设置时效时间,对业务处理的重试时间进行了限制。例如,在实际应用场景中,某业务处理的异常可通过重试解决,但一次重试的时间开销过大,对该异常进行预设次数的重试所需的总时间开销对于服务器而言是不可接受的。因此,可设置时效时间,以此将异常重试的总时间开销限制在一个可接受的范围内,大大减少对系统资源的浪费。
59.当重试注解包括重试次数、重试间隔及时效时间时,则通过预设的重试次数、重试间隔及时效时间为业务处理对应的重试任务添加属性信息。例如,所述重试任务的属性信息可包括最大重试次数、下次重试时间及任务时效时间,则通过预设的重试次数、预设重试间隔及时效时间为所述数据库中对应的重试任务设置属性信息包括:将预设重试次数设置
为属性信息中的最大重试次数、将预设重试间隔与当前时间加和作为属性信息中的下次重试时间、将时效时间与当前时间加和作为任务时效时间。
60.在为重试任务设置属性信息后,定期对数据库中的重试任务进行扫描,监测各个重试任务中的属性信息,当该重试任务的属性信息满足以下全部条件:最大重试次数不为0、本次扫描的时间点已经到达属性信息中的下次重试时间、本次扫描的时间点未超过任务时效时间,则基于该重试任务中的执行信息对其对应的业务处理进行调用,以此实现对该业务处理的重试。
61.当每次业务处理的重试执行完毕,更新其对应的重试任务中的属性信息:若经过本次重试,该业务处理仍异常,则将最大重试次数减1、将下次重试时间更新为重试注解中的重试间隔与本次重试时间的加和;若经过本次重试,该业务处理无异常,或已到达任务时效时间,则将最大重试次数更新为0。应明确,该实施例中属性信息为最大重试次数、下次重试时间、任务时效时间与其设置及更新的方式仅为举例,任何能由重试注解确定的,可捕获业务处理重试时机并进行更新的属性信息设置方案均在本技术的保护范围中。
62.优选地,在所述业务处理的重试过程中,获取控制指令,以通过所述控制指令控制所述业务处理的重试状态处于暂停、恢复或终止中的任一项。
63.在此,在整个业务处理的重试过程中,当需要人工干预重试过程,将某业务处理的重试过程终止、暂停或恢复时,可向系统发送控制指令,以实现人工干预的目的。为实现该目的,可为属性信息添加重试状态属性,基于上述设置时效时间的举例,所述属性信息包括重试次数、重试间隔、时效时间及重试状态。则通过重试次数、重试间隔、时效时间及重试状态为所述数据库中对应的重试任务设置属性信息包括:将预设重试次数设置为属性信息中的最大重试次数、将预设重试间隔与当前时间加和作为属性信息中的下次重试时间、将时效时间与当前时间加和作为任务时效时间、将所述重试状态设置为重试中。
64.在为重试任务设置属性信息后,定期对数据库中的重试任务进行扫描,监测各个重试任务中的属性信息,当该重试任务的属性信息同时满足以下内容:重试状态为重试中、最大重试次数不为0、本次扫描的时间点已经到达属性信息中的下次重试时间、本次扫描的时间点未超过任务时效时间,则基于该重试任务中的执行信息对其对应的业务处理进行调用,以此实现对该业务处理的重试。
65.当每次业务处理的重试执行完毕,更新其对应的重试任务中的属性信息:若经过本次重试,该业务处理仍异常,则将最大重试次数减1、将下次重试时间更新为重试注解中的重试间隔与本次重试时间的加和、重试状态仍保持为重试中;若经过本次重试,该业务处理无异常,或最大重试次数为0、或已到达任务时效时间,则将重试状态更新为完成。
66.当需要干预某业务处理的重试过程,将其提前终止时,直接将重试状态修改为完成;当需暂停该重试过程时,将重试状态修改为暂停,当需要继续进行重试过程时,则再将重试状态修改为重试中。应明确,该实施例中属性信息为最大重试次数、下次重试时间、任务时效时间、重试状态与其设置及更新的方式仅为举例,任何能通过改进属性信息从而实现人工干预重试过程的方案均在本技术的保护范围中。通过此方式,实现了在重试过程中的人工干预,使得开发人员可对重试过程进行自主的控制。
67.在另一种优选的实现方式中,可通过修改属性信息中的最大重试次数实现对异常重试的人工干预。当需要人工终止某业务处理的重试过程,可访问该业务处理对应的重试
任务,将其属性信息中的最大重试次数修改为0,由此实现了该业务处理的异常重试过程的终结;当需要暂停某业务处理的重试时,保存原有的最大重试次数,而后,将最大重试次数修改为0,当需要恢复该业务处理的异常重试过程时,将最大重试次数修改为原有的最大重试次数,由此实现了业务处理的异常重试过程的暂停及恢复。通过此方式,在不增加属性信息内容的基础上,实现了对异常重试过程的干预。
68.优选地,所述重试注解在spring框架下以注解的形式设置在所述业务处理中,并作为切点引入对业务处理的异常重试。在此,在spring框架下实现对业务处理的异常重试,将重试注解作为一个切点,定义在业务处理首部,当系统运行到该重试注解处,则进行将执行信息封装为数据库中的重试任务,并为该重试任务设置属性信息的操作,由于重试注解在spring框架下作为切点以注解的形式设置,因此上述建立重试任务的操作则作为一个切面,被重试注解引入到业务处理中,而在原业务处理中,只需添加重试注解,而不需添加任何与异常重试相关的执行逻辑,保证了业务处理与异常重试之间的独立性,实现了低耦合的隔离效果。同样地,所述业务处理的异常重试也可基于stringboot框架以相同的方式实现低耦合的隔离效果。
69.在一个优选实施例中,参见图2所示,其中,图2中的步骤s21及s24与图1实施例中的步骤s11及s13相同或基本相同,故在此不再赘述,仅以引用的方式包含于此。其中,所述步骤s22包括:若具有所述重试注解的业务处理出现异常,按照预设的线程重试次数对所述业务处理进行线程内的重试。
70.在此,对于出现异常的业务处理可先按照预设的线程重试次数进行线程内的重试。由于进行线程内的重试不需额外开辟其他线程,也不需定义其他内容,因此相对于其他重试方式具有方便快捷的特点,但尤其线程内的重试无法进行停机应用,在重试过程中,原业务处理的线程一旦结束,该线程内的重试过程也将被打断,且无法恢复,因此,可将线程内的重试与本技术的基于数据库的异常重试结合起来,在对业务处理进行基于数据库的重试之前,先按照进行预设次数的线程内的重试,若线程内的重试即可解决该业务处理的异常,则不需为业务处理添加额外的重试信息,也不需在数据库中建立重试任务,从而大大节省了进行异常重试所需的时间,避免了不必要的系统空间开销。在此,由于线程内的重试的中断无法恢复的缺点,因此,线程内重试的总时间开销不应过大,以避免线程终止导致的重试误结束。
71.所述步骤s23包括:当线程内重试失败,将所述业务处理的执行信息封装为一个重试任务存入数据库。在该步骤中,若线程内的重试无法在预设的线程重试次数内解决该业务处理的异常,则提取该业务处理的执行信息,将其存入数据库并封装为一个重试任务,以进行基于数据库的异常重试。
72.与现有技术相比,本技术通过对出现异常时需重试的业务处理添加重试注解;若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库;根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。通过此方式,实现了可停机应用的异常重试,在系统恢复正常运行后,可继续此前对业务处理进行的异常重试过程,避免了由于服务器停机或其他系统异常导致的异常重试过程无法恢复,大大增强了对业务处理进行异常重试的灵活性。
73.此外,本技术实施例还提供了一种计算机可读介质,其上存储有计算机可读指令,
所述计算机可读指令可被处理器执行以实现前述方法。
74.本技术实施例还提供了一种用于业务处理异常时重试的设备,其中,该设备包括:
75.一个或多个处理器;以及
76.存储有计算机可读指令的存储器,所述计算机可读指令在被执行时使所述处理器执行前述方法的操作。
77.例如,计算机可读指令在被执行时使所述一个或多个处理器:对出现异常时需重试的业务处理添加重试注解;若具有所述重试注解的业务处理出现异常,将所述业务处理的执行信息封装为一个重试任务存入数据库;根据所述数据库中所述业务处理对应的重试任务及所述重试注解实现对所述业务处理的重试。
78.对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1