请求效率高且不易丢失数据的数据请求方法技术

技术编号:31086637 阅读:17 留言:0更新日期:2021-12-01 12:40
本发明专利技术公开了一种请求效率高且不易丢失数据的数据请求方法、执行该方法的电子设备以及存储该方法的计算机可读存储介质。本发明专利技术针对异常处理方面,划分为I/O异常、业务逻辑异常、以及I/O异常、业务逻辑异常之外的其它异常(非程序性异常)等多层面维度,对于业务逻辑异常,用Spring Retry处理,而对于I/O异常这种底层异常,则是采用HttpClient重试机制处理,利用HttpRequestRetryHandler异常重试接口能够更底层、更高效解决网络层面异常的问题,减小了程序损耗。且,在经HttpClient重试、Spring Retry重试没有实现成功调用以及非程序性异常情形,则是将网络请求包装成对象存储,以便下次重新触发完成网络请求,避免数据的丢失。避免数据的丢失。避免数据的丢失。

【技术实现步骤摘要】
请求效率高且不易丢失数据的数据请求方法


[0001]本专利技术涉及数据交互
,尤其涉及一种请求效率高且不易丢失数据的数据请求方法、电子设备及可读存储介质。

技术介绍

[0002]数据平台/仓库中,往往需要大量各行业纬度的数据来进行数据整合与分析、建模,从而提供有力的决策支持,所以源源不断从第三方数据源中获取数据是极有必要的。其中,通过接口形式调用较为常见,如何保证网络请求中能高效并不轻易丢失其中一条宝贵的数据是亟需去研究解决的问题。
[0003]为提高网络发生异常时请求成功的概率,需要预先制定好重试机制,在请求调用失败之后重新尝试发起请求。现阶段,通常采用Spring Retry、Guava Retrying等重试组件实现异常重试处理,都实现了非常优秀的异常重试处理机制,但不涉及业务逻辑的IOException异常也抛出到业务层面重试处理,导致不必要的额外程序损耗。且,存在因短期网络不稳定或数据源方服务器宕机、数据未准备好等因素超过了重试次数从而数据获取失败,会造成数据的缺失以及后期排查难度大等问题。
[0004]因此,亟需提供一种新的数据请求方法,以解决上述现有技术中所存在的问题。

技术实现思路

[0005]本专利技术的目的在于提供一种请求效率高且不易丢失数据的数据请求方法、电子设备及可读存储介质。
[0006]为实现上述目的,本专利技术提供一种数据请求方法,包括步骤:
[0007]S1,发起网络请求,以调用接口获取数据;
[0008]S2,获取接口调用结果,若成功调用,进入步骤S5,否则,进入步骤S3;
[0009]S3,确定所述网络请求对应的异常类型,若所述异常类型为I/O异常,采用HttpClient重试机制发起重试请求,若所述异常类型为业务逻辑异常,采用Spring Retry重试机制发起重试请求,经所述HttpClient重试和/或Spring Retry重试没有成功调用且已达到预先定义的重试阈值,或,所述异常类型为I/O异常、业务逻辑异常之外的其它异常,进入步骤S4;
[0010]S4,将所述网络请求包装成对象并存储;
[0011]S5,结束。
[0012]较佳地,所述重试阈值包括第一重试阈值和第二重试阈值,在步骤S3中,首先判断所述异常类型是否为I/O异常,若是I/O异常,采用所述HttpClient重试机制发起重试请求,直至成功调用进入步骤S5或超过所述第一重试阈值;若超过所述第一重试阈值或所述异常类型不是I/O异常,判断所述异常类型是否为业务逻辑异常,若是业务逻辑异常,采用所述Spring Retry重试机制发起重试请求,直至成功调用进入步骤S5或超过所述第二重试阈值;若超过所述第二重试阈值或所述异常类型不是业务逻辑异常,进入步骤S4。
[0013]具体地,在步骤S1之前,还包括步骤:S0,构造HttpClient,定义HttpRequestRetryHandler接口;以及,定义Spring Retry重试模板,设置对应的重试策略和退避策略。
[0014]较佳地,以单例模式构造HttpClient并设置超时时间,并利用PoolingHttpClientConnectionManager启用Http连接池实现连接复用。
[0015]较佳地,开启定时扫描空连接的单线程池任务,关闭异常或空闲连接。
[0016]较佳地,在JVM关闭时,执行addShutdownHook指令关闭HttpClient对象和关闭用于扫描空连接的单线程池。
[0017]较佳地,在步骤S4之后步骤S5之前,还包括:基于Java反射机制重新执行所述网络请求。
[0018]为实现上述目的,本专利技术提供一种电子设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时,执行如上所述的数据请求方法。
[0019]为实现上述目的,本专利技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序可被处理器执行以完成如上所述的数据请求方法。
[0020]与现有技术相比,本专利技术针对异常处理方面,划分为I/O异常、业务逻辑异常、以及I/O异常、业务逻辑异常之外的其它异常(非程序性异常)等多层面维度,对于业务逻辑异常,用Spring Retry处理,而对于I/O异常这种底层异常,则是采用HttpClient重试机制处理,利用HttpRequestRetryHandler异常重试接口能够更底层、更高效解决网络层面异常的问题,减小了程序损耗。且,在经HttpClient重试、Spring Retry重试没有实现成功调用以及非程序性异常情形,则是将网络请求包装成对象存储,以便下次重新触发完成网络请求,避免数据的丢失。
附图说明
[0021]图1是本专利技术一实施例数据请求方法的流程示意图。
[0022]图2是本专利技术一实施例电子设备的组成结构框图。
具体实施方式
[0023]为详细说明本专利技术的内容、构造特征、所实现目的及效果,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0024]本专利技术所提供的数据请求方法包括步骤:
[0025]S0,构造HttpClient,定义HttpRequestRetryHandler接口;以及,定义Spring Retry重试模板,设置对应的重试策略和退避策略。其中,如何构造HttpClient并实现HttpRequestRetryHandler接口,以及Spring Retry的定义和设置为通过现有技术实现。
[0026]S1,发起网络请求,以调用接口获取数据。
[0027]S2,获取接口调用结果,若成功调用,进入步骤S5,否则,进入步骤S3。
[0028]S3,确定网络请求对应的异常类型,若异常类型为I/O异常(IOException异常,发
生I/O错误时引发的异常),采用HttpClient重试机制发起重试请求,若异常类型为业务逻辑异常(不符合业务规则的异常),采用Spring Retry重试机制发起重试请求,经HttpClient重试和/或Spring Retry重试没有成功调用且已达到预先定义的重试阈值,或,异常类型为I/O异常、业务逻辑异常之外的其它异常,进入步骤S4。
[0029]S4,将网络请求包装成对象并存储到数据库或消息队列等存储介质中。
[0030]S5,结束。
[0031]其中,如何确定网络请求对应的异常类型为现有技术,可以通过例如instanceof运算符实现,在此不再赘述。
[0032]下面,以一具体实施例为例并结合附图图1对本专利技术的数据请求方法进行详细说明。
[0033]请本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种请求效率高且不易丢失数据的数据请求方法,其特征在于,包括步骤:S1,发起网络请求,以调用接口获取数据;S2,获取接口调用结果,若成功调用,进入步骤S5,否则,进入步骤S3;S3,确定所述网络请求对应的异常类型,若所述异常类型为I/O异常,采用HttpClient重试机制发起重试请求,若所述异常类型为业务逻辑异常,采用Spring Retry重试机制发起重试请求,经所述HttpClient重试和/或Spring Retry重试没有成功调用且已达到预先定义的重试阈值,或,所述异常类型为I/O异常、业务逻辑异常之外的其它异常,进入步骤S4;S4,将所述网络请求包装成对象并存储;S5,结束。2.如权利要求1所述的数据请求方法,其特征在于,所述重试阈值包括第一重试阈值和第二重试阈值,在步骤S3中,首先判断所述异常类型是否为I/O异常,若是I/O异常,采用所述HttpClient重试机制发起重试请求,直至成功调用进入步骤S5或超过所述第一重试阈值;若超过所述第一重试阈值或所述异常类型不是I/O异常,判断所述异常类型是否为业务逻辑异常,若是业务逻辑异常,采用所述Spring Retry重试机制发起重试请求,直至成功调用进入步骤S5或超过所述第二重试阈值;若超过所述第二重试阈值或所述异常类型不是业务逻辑异常,进入步骤S4。3.如权利要求1所述的数据请...

【专利技术属性】
技术研发人员:陈浩强
申请(专利权)人:东莞盟大集团有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1