CN113360815A - 一种请求重试方法和装置 - Google Patents
一种请求重试方法和装置 Download PDFInfo
- Publication number
- CN113360815A CN113360815A CN202010143465.8A CN202010143465A CN113360815A CN 113360815 A CN113360815 A CN 113360815A CN 202010143465 A CN202010143465 A CN 202010143465A CN 113360815 A CN113360815 A CN 113360815A
- Authority
- CN
- China
- Prior art keywords
- retry
- request
- waiting time
- requests
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000004044 response Effects 0.000 claims abstract description 33
- 238000004422 calculation algorithm Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 claims description 6
- 230000003111 delayed effect Effects 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 4
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 238000007654 immersion Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
Abstract
本发明公开了一种请求重试方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:在第一请求的响应结果指示失败情况下,根据第一请求的当前已重试次数判断是否可重试;若可重试则确定当前正在重试的第二请求数量;如果该第二请求数量小于最大重试请求数量,则延迟重试等待时间后重试,否则等待一第二请求重试完毕后再延时重试等待时间重试,重试等待时间基于预设的初始等待时间间隔、第一请求当前已重试次数计算得到。该实施方式能限制重试请求个数,对每个请求执行有限次数重试,还能判断重试时延最佳时间,避免过多无效重试,无需对代码浸入式修改,重试逻辑与正常逻辑解耦,在前端调用接口失败时通过简单优雅可复用方式重试。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种请求重试方法和装置。
背景技术
在应用中经常需要实现如下功能:将数据上传到远程存储服务或者从远程存储服务拉取所需数据,同时在成功响应情况下做其他操作。这个功能可简单分为两个步骤:调取远程服务逻辑包装给处理方法返回处理结果;基于上一步的处理结果或者捕捉异常实现重试上传逻辑,否则继续逻辑操作。当所依赖的接口因内部错误或其他错误而返回系统异常时,重试机制就显得尤为重要,否则就需要人工操作进行重新调用。
目前前端ajax(Asynchronous Javascript And XML,异步JavaScript和XML)请求重试机制有几种方案:一是“手动”重试:在调用接口的时候,通过循环当接口请求出现异常时立刻重新请求,该方法虽然实现了重试,但是可能所依赖的接口尚未从网络异常中恢复,从而接下来的重试都是失败的,而且此机制直接对代码进行侵入式修改,重试方式不优雅;二是类似Axios库(一种HTTP库)的重试实践:通过Axios的响应拦截,获取响应结果后判断是否要重试及是否超过重试次数后,通过定时器进行延时处理,然后根据前述判断结果适时发起axios请求。该方式重试方式也不够优雅,并且不能判断时延的最佳时间。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
方案一和方案二均无法限制重试请求个数,无法优雅有效地执行重试,并且,方案一在所依赖的接口尚未从网络异常中恢复时,后续重试都是失败的,导致执行了较多的无效重试,且直接对代码进行侵入式修改,未能实现重试逻辑与正常逻辑的解耦,方案二不能判断时延的最佳时间,仍然无法避免较多的无效重试。
发明内容
有鉴于此,本发明实施例提供一种请求重试方法和装置,能够实现限制重试请求个数,并对每个请求执行有限次数地重试,还能判断重试时延的最佳时间,避免过多的无效重试,无需对代码进行浸入式修改,将重试逻辑与正常逻辑解耦,在前端调用接口失败时通过简单优雅可复用的方式实现重试。
为实现上述目的,根据本发明实施例的一个方面,提供了一种请求重试方法。
一种请求重试方法,包括:在服务器返回的对第一请求的响应结果指示失败的情况下,根据所述第一请求的当前已重试次数,判断所述第一请求是否可执行重试;在所述第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量;如果所述当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对所述第一请求执行重试;如果所述当前正在执行重试的第二请求数量不小于所述最大重试请求数量,则等待其中一个所述第二请求重试完毕后,延时所述重试等待时间再对所述第一请求执行重试,所述重试等待时间是基于预设的初始等待时间间隔、所述第一请求的当前已重试次数计算得到的。
可选地,基于所述预设的初始等待时间间隔、所述第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,计算所述重试等待时间。
可选地,基于所述预设的初始等待时间间隔、所述第一请求的当前已重试次数,利用所述添加抖动的重试指数退避算法,按照如下方式计算所述重试等待时间:
其中,random_between(a,b)是指取区间[a,b)中的一个值为结果,
可选地,在确定当前正在执行重试的第二请求数量的步骤之后,包括:如果所述第一请求的当前已重试次数为0,则为所述第一请求分配唯一标识,并将所述第一请求的唯一标识缓存到本地存储器。
可选地,在所述第一请求的当前已重试次数未达到预设的最大重试次数的情况下,确定所述第一请求可执行重试,否则,确定所述第一请求不可执行重试;在所述第一请求不可执行重试的情况下,将所述本地存储器中缓存的所述第一请求的唯一标识删除。
可选地,所述确定当前正在执行重试的第二请求数量,包括:统计所述本地存储器当前缓存的各请求的唯一标识数量,根据所述统计结果确定所述当前正在执行重试的第二请求数量。
可选地,对于任一请求,在执行完所述重试,并得到所述服务器返回的指示成功的所述响应结果后,删除所述本地存储器缓存的该请求的唯一标识,所述任一请求为所述第一请求或所述第二请求。
根据本发明实施例的另一方面,提供了一种请求重试装置。
一种请求重试装置,包括:重试执行条件判断模块,用于在服务器返回的对第一请求的响应结果指示失败的情况下,根据所述第一请求的当前已重试次数,判断所述第一请求是否可执行重试;重试请求数量确定模块,用于在所述第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量;重试执行模块,用于如果所述当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对所述第一请求执行重试;如果所述当前正在执行重试的第二请求数量不小于所述最大重试请求数量,则等待其中一个所述第二请求重试完毕后,延时所述重试等待时间再对所述第一请求执行重试,所述重试等待时间是基于预设的初始等待时间间隔、所述第一请求的当前已重试次数计算得到的。
可选地,还包括重试等待时间计算模块,用于:基于所述预设的初始等待时间间隔、所述第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,计算所述重试等待时间。
可选地,所述重试等待时间计算模块还用于:基于所述预设的初始等待时间间隔、所述第一请求的当前已重试次数,利用所述添加抖动的重试指数退避算法,按照如下方式计算所述重试等待时间:
其中,random_between(a,b)是指取区间[a,b)中的一个值为结果,
可选地,还包括标识分配和存储模块,用于:如果所述第一请求的当前已重试次数为0,则为所述第一请求分配唯一标识,并将所述第一请求的唯一标识缓存到本地存储器。
可选地,所述重试执行条件判断模块在所述第一请求的当前已重试次数未达到预设的最大重试次数的情况下,确定所述第一请求可执行重试,否则,确定所述第一请求不可执行重试;所述装置还包括第一标识删除模块,用于:在所述第一请求不可执行重试的情况下,将所述本地存储器中缓存的所述第一请求的唯一标识删除。
可选地,重试请求数量确定模块还用于:在所述第一请求可执行重试的情况下,统计所述本地存储器当前缓存的各请求的唯一标识数量,根据所述统计结果确定所述当前正在执行重试的第二请求数量。
可选地,还包括第二标识删除模块,用于:对于任一请求,在执行完所述重试,并得到所述服务器返回的指示成功的所述响应结果后,删除所述本地存储器缓存的该请求的唯一标识,所述任一请求为所述第一请求或所述第二请求。
根据本发明实施例的又一方面,提供了一种电子设备。
一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现本发明实施例所提供的请求重试方法。
根据本发明实施例的又一方面,提供了一种计算机可读介质。
一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例所提供的请求重试方法。
上述发明中的一个实施例具有如下优点或有益效果:在服务器返回的对第一请求的响应结果指示失败的情况下,根据第一请求的当前已重试次数,判断第一请求是否可执行重试,在可执行重试的情况下,确定当前正在执行重试的第二请求数量;如果当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对第一请求执行重试;如果当前正在执行重试的第二请求数量不小于最大重试请求数量,则等待其中一个第二请求重试完毕后,延时重试等待时间再对第一请求执行重试,重试等待时间是基于预设的初始等待时间间隔、第一请求的当前已重试次数,利用添加抖动的重试指数退避算法计算得到的。能够实现限制重试请求个数,并对每个请求执行有限次数地重试,还能判断重试时延的最佳时间,避免过多的无效重试,无需对代码进行浸入式修改,将重试逻辑与正常逻辑解耦,在前端调用接口失败时通过简单优雅可复用的方式实现重试。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明第一实施例的请求重试方法的主要步骤示意图;
图2是根据本发明第二实施例的请求重试原理示意图;
图3是根据本发明第三实施例的请求重试流程示意图;
图4是根据本发明第四实施例的请求重试装置的主要模块示意图;
图5是本发明实施例可以应用于其中的示例性系统架构图;
图6是适于用来实现本发明实施例的终端设备的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明第一实施例的请求重试方法的主要步骤示意图。
如图1所示,本发明实施例的请求重试方法主要包括如下的步骤S101至步骤S103。
步骤S101:在服务器返回的对第一请求的响应结果指示失败的情况下,根据第一请求的当前已重试次数,判断第一请求是否可执行重试。
步骤S102:在第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量。
步骤S103:如果当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对第一请求执行重试;如果当前正在执行重试的第二请求数量不小于最大重试请求数量,则等待其中一个第二请求重试完毕后,延时重试等待时间再对第一请求执行重试,重试等待时间是基于预设的初始等待时间间隔、第一请求的当前已重试次数计算得到的。
本发明实施例的第一请求和第二请求是客户端向服务器的请求,用于向服务器请求数据,服务器根据请求的URL(Uniform Resource Locator,统一资源定位符)映射到对应的接口以将请求的数据返回客户端。第一请求是指对应一个接口的请求,第二请求是指对应另外的一个接口的请求,第一请求与第二请求对应的接口不同。
在一个实施例中,基于预设的初始等待时间间隔、第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,计算重试等待时间。
具体地,基于预设的初始等待时间间隔、第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,可以按照如下方式计算重试等待时间:
其中,random_between(a,b)是指取区间[a,b)中的一个值为结果,
例如,假设a为200,b为300,则根据random_between(a,b)计算规则,可以随机选取[200,300)内的一个值作为重试等待时间。
在一个实施例中,在确定当前正在执行重试的第二请求数量的步骤之后,包括:如果第一请求的当前已重试次数为0,则为第一请求分配唯一标识,并将第一请求的唯一标识缓存到本地存储器。
优选地,除了将第一请求的唯一标识缓存到本地存储器之外,还可以将第一请求相关数据(包括请求头和请求体中的数据)缓存到本地存储器。
根据第一请求的当前已重试次数,判断第一请求是否可执行重试,具体地,在第一请求的当前已重试次数未达到预设的最大重试次数的情况下,确定第一请求可执行重试,否则,确定第一请求不可执行重试。
在一个实施例中,在第一请求不可执行重试的情况下,将本地存储器中缓存的第一请求的唯一标识删除。
除了将本地存储器中缓存的第一请求的唯一标识删除之外,如果本地存储器中还缓存有第一请求相关数据(包括请求头和请求体中的数据),那么将该第一请求相关数据也从本地存储器中删除。
在一个实施例中,确定当前正在执行重试的第二请求数量,包括:统计本地存储器当前缓存的各请求的唯一标识数量,根据统计结果确定当前正在执行重试的第二请求数量。具体地,本地存储器当前缓存的各请求的唯一标识数量即当前正在执行重试的第二请求数量。
在一个实施例中,对于任一请求,在执行完重试并得到服务器返回的指示成功的响应结果后,删除本地存储器缓存的该请求的唯一标识,任一请求为第一请求或第二请求。
除了删除本地存储器缓存的该请求的唯一标识之外,如果本地存储器还缓存有该请求相关数据,例如该请求的请求头和请求体中的数据,那么将该请求相关数据也从本地存储器中删除。
图2是根据本发明第二实施例的请求重试原理示意图。
如图2所示,假设请求启用了重试机制,本实施例设置最大重试次数retry=3,重试等待时间符合添加随机值的指数退避。
不考虑抖动的重试指数退避如下:
重试等待时间=base×Mn
本实施例中,M设置为2,n为请求的当前已重试次数,base为初始等待时间间隔,设置初始等待时间间隔为200ms(毫秒)。
本实施例在上式基础上添加抖动,给等待时间增加了随机性,并可以避免一定程度的冲突,如下所示:
在M设置为2,base设置为200ms时,重试等待时间即按照下式计算:
重试等待时间=random_between(200×2n,200×2n±100×2n)
本发明实施例的请求为客户端向服务器发送的ajax请求,ajax请求可以有多个,如图2所示,假设有ajax请求1,ajax请求2,……,ajax请求n,ajax请求n+1。
当应用内发起ajax请求,首先根据响应结果判断接口是否异常,响应结果指示失败表示接口异常,否则接口无异常。如果接口出现异常,则继续判断该接口对应的ajax请求当前已执行过几次重试,若未执行过重试,则在经过S1=random_between(200,200±100))毫秒的延时后进行首次重试,如果已执行过一次重试,则需要经过S2=random_between(400,400±200))毫秒的延时之后,执行第二次重试;如果已执行过两次重试,则需经S3=random_between(800,800±400))毫秒的延时之后,执行第三次重试。执行完第三次重试之后,无论响应结果是否符合预期,结束对该接口的请求操作,得到第三次重试结果或者抛出异常。
每一个接口响应失败,在首次执行重试时,为接口对应的ajax请求设置唯一标识(ID),并将该ID和该ajax请求的所有参数(包括请求头和请求体中的数据)都缓存到本地存储器中,当请求的接口响应成功或者请求达到最大重试次数后仍响应失败时,将本地存储器中缓存的该请求的唯一ID和请求参数删除,通过该方式可简单地确定当前正在执行重试的请求数量,进而控制重试请求数量。通过限制重试请求数量可以防止客户端的过多请求在同一时间段内重试。
图3是根据本发明第三实施例的请求重试流程示意图。
在项目中,前端有较多静态资源及功能逻辑请求,若在请求某个静态资源时,CDN(Content Delivery Network,内容分发网络)突发网络波动或其他不稳定的情况,通过启用重试机制,增加接口请求成功的概率。
如图3所示,预先设置最大重试次数为3,最大重试请求数量为3。请求重试流程包括如下的步骤S301至步骤S309。本实施例的请求重试流程由客户端执行。
步骤S301:向服务器发送第n次第一请求。
步骤S302:判断服务器返回的响应结果中的状态码(即响应状态码code)是否大于或等于400,若是,则执行步骤S303,否则执行步骤S309。
如果code≥400,表示本次请求失败,如果code<400,表示本次请求成功。
步骤S303:判断第一请求的当前已重试次数是否小于3,若是,执行步骤S304,否则执行步骤S309。
步骤S304:当前正在执行重试的第二请求数量是否小于3,若是,则执行步骤S306,否则执行步骤S305。
步骤S305:等待其中一个第二请求重试完毕。然后执行步骤S306。
步骤S306:将第一请求的请求参数、响应结果缓存到本地存储器,如果第一请求的当前已重试次数=0,则为第一请求分配唯一ID,并将该分配的唯一ID也缓存到本地存储器。
在第一请求进行第一次重试之前,为第一请求分配唯一ID,并将第一请求的唯一ID、请求参数、响应结果缓存到本地存储器,在后续重试之前,由于已经缓存过第一请求的唯一ID和请求参数,可以只对响应结果更新。
步骤S307:延迟重试等待时间后对第一请求执行重试,将第一请求的当前已重试次数加1。
可以通过如下方式计算得到重试等待时间:
重试等待时间=random_between(200×2n,200×2n±100×2n)
其中,n为第一请求的当前已重试次数。
可以通过前端定时器设置random_between(200×2n,200×2n±100×2n)。
例如首次请求失败后时,n=0,通过前端定时器设置random_betwe en(200,200±100)毫秒的延时,以便经历random_between(200,200±100)毫秒的延时后才开始执行第一次重试逻辑。由于没有立刻执行重试而是延时random_between(200,200±100))毫秒,避免了在请求的资源或者所依赖的远程接口还没有恢复的情况下,就立刻重试而导致请求同样失败的响应结果。
第一次重试失败之后,n=1,通过前端定时器设置random_between(400,400±200)毫秒的延时,从而执行第二次重试之前的等待时间为ra ndom_between(200,200±100))毫秒,本发明实施例应用了指数退避的原理,对于连续错误,重试等待时间会越来越长,并且添加了抖动,从而有效判断重试时延的最佳时间,避免过多的无效重试。
同理,第二次重试失败后,延时为random_between(800,800±400))。
步骤S308:判断服务器返回的响应状态码code是否小于400,若是,则执行步骤S309,否则,令n=n+1,然后重新执行步骤S301。
步骤S309:得到第一请求的最终响应结果,将第一请求的当前已重试次数重置为0,将第一请求的唯一ID从本地存储器删除。
本步骤中,除了将第一请求的唯一ID从本地存储器删除之外,还将第一请求的请求参数、响应结果等数据从本地存储器中删除。
由于在接口访问、数据加载访问及数据上传校验等功能逻辑中存在不稳定依赖场景,需要通过重试获取预期结果,重试机制可以保护系统减少因网络波动、依赖服务短暂性不可用带来的影响,让系统更稳定地运行,也可以提高应用程序的可靠性和降低开发人员操作成本,本发明实施例实现了使用更优雅的方式进行前端重试,将重试逻辑与业务逻辑解耦,利用添加抖动的重试指数退避算法计算前端ajax请求重试的重试等待时间,实现更好地流程控制,通过本地缓存和添加唯一ID可限制重试请求个数。
图4是根据本发明第四实施例的请求重试装置的主要模块示意图。
如图4所示,本发明一个实施例的请求重试装置400主要包括:重试执行条件判断模块401、重试请求数量确定模块402、重试执行模块403。
重试执行条件判断模块401,用于在服务器返回的对第一请求的响应结果指示失败的情况下,根据第一请求的当前已重试次数,判断第一请求是否可执行重试。
重试请求数量确定模块402,用于在第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量。
重试执行模块403,用于如果当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对第一请求执行重试;如果当前正在执行重试的第二请求数量不小于最大重试请求数量,则等待其中一个第二请求重试完毕后,延时重试等待时间再对第一请求执行重试,重试等待时间是基于预设的初始等待时间间隔、第一请求的当前已重试次数计算得到的。
在一个实施例中,请求重试装置400还包括重试等待时间计算模块,用于:基于预设的初始等待时间间隔、第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,计算重试等待时间。
重试等待时间计算模块具体可以用于:基于预设的初始等待时间间隔、第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,按照如下方式计算重试等待时间:
其中,random_between(a,b)是指取区间[a,b)中的一个值为结果,
在一个实施例中,请求重试装置400还包括标识分配和存储模块,用于:如果第一请求的当前已重试次数为0,则为第一请求分配唯一标识,并将第一请求的唯一标识缓存到本地存储器。
重试执行条件判断模块401在第一请求的当前已重试次数未达到预设的最大重试次数的情况下,确定第一请求可执行重试,否则,确定第一请求不可执行重试。
在一个实施例中,请求重试装置400还包括第一标识删除模块,用于:在第一请求不可执行重试的情况下,将本地存储器中缓存的第一请求的唯一标识删除。
重试请求数量确定模块402具体可以用于:在第一请求可执行重试的情况下,统计本地存储器当前缓存的各请求的唯一标识数量,根据统计结果确定当前正在执行重试的第二请求数量。
在一个实施例中,请求重试装置400还包括第二标识删除模块,用于:对于任一请求,在执行完重试,并得到服务器返回的指示成功的响应结果后,删除本地存储器缓存的该请求的唯一标识,任一请求为第一请求或第二请求。
上述的第一标识删除模块和第二标识删除模块可以实现为同一个模块。
另外,在本发明实施例中所述请求重试装置的具体实施内容,在上面所述请求重试方法中已经详细说明了,故在此重复内容不再说明。
图5示出了可以应用本发明实施例的请求重试方法或请求重试装置的示例性系统架构500。
如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的请求重试方法一般由终端设备501、502、503执行,相应地,请求重试装置一般设置于终端设备501、502、503中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本申请实施例的终端设备的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括重试执行条件判断模块、重试请求数量确定模块、重试执行模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,重试执行条件判断模块还可以被描述为“用于在服务器返回的对第一请求的响应结果指示失败的情况下,根据第一请求的当前已重试次数,判断第一请求是否可执行重试的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:在服务器返回的对第一请求的响应结果指示失败的情况下,根据所述第一请求的当前已重试次数,判断所述第一请求是否可执行重试;在所述第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量;如果所述当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对所述第一请求执行重试;如果所述当前正在执行重试的第二请求数量不小于所述最大重试请求数量,则等待其中一个所述第二请求重试完毕后,延时所述重试等待时间再对所述第一请求执行重试,所述重试等待时间是基于预设的初始等待时间间隔、所述第一请求的当前已重试次数计算得到的。
根据本发明实施例的技术方案,在服务器返回的对第一请求的响应结果指示失败的情况下,根据第一请求的当前已重试次数,判断第一请求是否可执行重试,在可执行重试的情况下,确定当前正在执行重试的第二请求数量;如果当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对第一请求执行重试;如果当前正在执行重试的第二请求数量不小于最大重试请求数量,则等待其中一个第二请求重试完毕后,延时重试等待时间再对第一请求执行重试,重试等待时间是基于预设的初始等待时间间隔、第一请求的当前已重试次数,利用添加抖动的重试指数退避算法计算得到的。能够实现限制重试请求个数,并对每个请求执行有限次数地重试,还能判断重试时延的最佳时间,避免过多的无效重试,无需对代码进行浸入式修改,将重试逻辑与正常逻辑解耦,在前端调用接口失败时通过简单优雅可复用的方式实现重试。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种请求重试方法,其特征在于,包括:
在服务器返回的对第一请求的响应结果指示失败的情况下,根据所述第一请求的当前已重试次数,判断所述第一请求是否可执行重试;
在所述第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量;
如果所述当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对所述第一请求执行重试;如果所述当前正在执行重试的第二请求数量不小于所述最大重试请求数量,则等待其中一个所述第二请求重试完毕后,延时所述重试等待时间再对所述第一请求执行重试,所述重试等待时间是基于预设的初始等待时间间隔、所述第一请求的当前已重试次数计算得到的。
2.根据权利要求1所述的方法,其特征在于,基于所述预设的初始等待时间间隔、所述第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,计算所述重试等待时间。
3.根据权利要求1所述的方法,其特征在于,在确定当前正在执行重试的第二请求数量的步骤之后,包括:
如果所述第一请求的当前已重试次数为0,则为所述第一请求分配唯一标识,并将所述第一请求的唯一标识缓存到本地存储器。
4.根据权利要求3所述的方法,其特征在于,在所述第一请求的当前已重试次数未达到预设的最大重试次数的情况下,确定所述第一请求可执行重试,否则,确定所述第一请求不可执行重试;
在所述第一请求不可执行重试的情况下,将所述本地存储器中缓存的所述第一请求的唯一标识删除。
5.根据权利要求3所述的方法,其特征在于,所述确定当前正在执行重试的第二请求数量,包括:
统计所述本地存储器当前缓存的各请求的唯一标识数量,根据所述统计结果确定所述当前正在执行重试的第二请求数量。
6.根据权利要求5所述的方法,其特征在于,对于任一请求,在执行完所述重试,并得到所述服务器返回的指示成功的所述响应结果后,删除所述本地存储器缓存的该请求的唯一标识,所述任一请求为所述第一请求或所述第二请求。
7.一种请求重试装置,其特征在于,包括:
重试执行条件判断模块,用于在服务器返回的对第一请求的响应结果指示失败的情况下,根据所述第一请求的当前已重试次数,判断所述第一请求是否可执行重试;
重试请求数量确定模块,用于在所述第一请求可执行重试的情况下,确定当前正在执行重试的第二请求数量;
重试执行模块,用于如果所述当前正在执行重试的第二请求数量小于最大重试请求数量,则延迟重试等待时间后对所述第一请求执行重试;如果所述当前正在执行重试的第二请求数量不小于所述最大重试请求数量,则等待其中一个所述第二请求重试完毕后,延时所述重试等待时间再对所述第一请求执行重试,所述重试等待时间是基于预设的初始等待时间间隔、所述第一请求的当前已重试次数计算得到的。
8.根据权利要求7所述的装置,其特征在于,还包括重试等待时间计算模块,用于:基于所述预设的初始等待时间间隔、所述第一请求的当前已重试次数,利用添加抖动的重试指数退避算法,计算所述重试等待时间。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010143465.8A CN113360815A (zh) | 2020-03-04 | 2020-03-04 | 一种请求重试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010143465.8A CN113360815A (zh) | 2020-03-04 | 2020-03-04 | 一种请求重试方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113360815A true CN113360815A (zh) | 2021-09-07 |
Family
ID=77523525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010143465.8A Pending CN113360815A (zh) | 2020-03-04 | 2020-03-04 | 一种请求重试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113360815A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114237748A (zh) * | 2021-12-17 | 2022-03-25 | 广州华多网络科技有限公司 | 服务重试配置方法及其装置、设备、介质、产品 |
CN114979256A (zh) * | 2022-05-19 | 2022-08-30 | 北京京东乾石科技有限公司 | 一种消息推送方法、装置、电子设备及计算机可读介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060230305A1 (en) * | 2005-04-07 | 2006-10-12 | Microsoft Corporation | Retry request overload protection |
US20090327619A1 (en) * | 2008-04-18 | 2009-12-31 | International Business Machines Corporation | Access Speculation Predictor with Predictions Based on Memory Region Prior Requestor Tag Information |
CN104010023A (zh) * | 2013-02-26 | 2014-08-27 | 霍尼韦尔国际公司 | 普通文件传输协议tftp加速文件重试选项 |
CN105847184A (zh) * | 2016-02-22 | 2016-08-10 | 乐视移动智能信息技术(北京)有限公司 | 用于android操作系统的网络请求方法、装置和系统 |
CN107508860A (zh) * | 2017-07-21 | 2017-12-22 | 深圳市金立通信设备有限公司 | 一种服务限流方法、服务器及终端 |
CN110391880A (zh) * | 2019-08-23 | 2019-10-29 | 聚好看科技股份有限公司 | 基于终端-服务器架构的访问请求处理方法和设备 |
US20200045117A1 (en) * | 2018-08-02 | 2020-02-06 | International Business Machines Corporation | Dynamic backoff and retry attempts based on incoming request |
-
2020
- 2020-03-04 CN CN202010143465.8A patent/CN113360815A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060230305A1 (en) * | 2005-04-07 | 2006-10-12 | Microsoft Corporation | Retry request overload protection |
US20090327619A1 (en) * | 2008-04-18 | 2009-12-31 | International Business Machines Corporation | Access Speculation Predictor with Predictions Based on Memory Region Prior Requestor Tag Information |
CN104010023A (zh) * | 2013-02-26 | 2014-08-27 | 霍尼韦尔国际公司 | 普通文件传输协议tftp加速文件重试选项 |
CN105847184A (zh) * | 2016-02-22 | 2016-08-10 | 乐视移动智能信息技术(北京)有限公司 | 用于android操作系统的网络请求方法、装置和系统 |
CN107508860A (zh) * | 2017-07-21 | 2017-12-22 | 深圳市金立通信设备有限公司 | 一种服务限流方法、服务器及终端 |
US20200045117A1 (en) * | 2018-08-02 | 2020-02-06 | International Business Machines Corporation | Dynamic backoff and retry attempts based on incoming request |
CN110391880A (zh) * | 2019-08-23 | 2019-10-29 | 聚好看科技股份有限公司 | 基于终端-服务器架构的访问请求处理方法和设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114237748A (zh) * | 2021-12-17 | 2022-03-25 | 广州华多网络科技有限公司 | 服务重试配置方法及其装置、设备、介质、产品 |
CN114979256A (zh) * | 2022-05-19 | 2022-08-30 | 北京京东乾石科技有限公司 | 一种消息推送方法、装置、电子设备及计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111475180A (zh) | 更新客户端缓存的方法和系统 | |
CN109873863B (zh) | 服务的异步调用方法和装置 | |
CN109918191B (zh) | 一种业务请求防频的方法和装置 | |
CN110661826A (zh) | 代理服务器端处理网络请求的方法和代理服务器 | |
CN110909022A (zh) | 一种数据查询方法和装置 | |
CN113411404A (zh) | 一种文件下载方法、装置、服务器及存储介质 | |
CN113360815A (zh) | 一种请求重试方法和装置 | |
CN113282589A (zh) | 一种数据获取方法和装置 | |
CN109995863B (zh) | 一种动态资源下载方法、装置、电子设备及存储介质 | |
CN111783005A (zh) | 显示网页的方法、装置和系统、计算机系统和介质 | |
CN111800223A (zh) | 生成发送报文、处理接收报文的方法、装置和系统 | |
US20230093004A1 (en) | System and method for asynchronous backend processing of expensive command line interface commands | |
CN112688982B (zh) | 一种用户请求处理方法和装置 | |
CN114374657A (zh) | 一种数据处理方法和装置 | |
CN114115941A (zh) | 资源发送方法、页面渲染方法、装置、电子设备和介质 | |
CN111950232B (zh) | 一种自动切换号段的方法和装置 | |
CN112866179A (zh) | 限流方法和限流装置 | |
CN113760487A (zh) | 一种业务处理方法和装置 | |
CN109213815B (zh) | 控制执行次数的方法、装置、服务器终端以及可读介质 | |
CN113722193A (zh) | 检测页面异常的方法和装置 | |
CN111930696A (zh) | 一种基于小程序的文件传输处理方法及系统 | |
CN113364615B (zh) | 滚动升级的方法、装置、设备和计算机可读介质 | |
CN110784479B (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN110262756B (zh) | 用于缓存数据的方法和装置 | |
CN112783639B (zh) | 一种应用于服务重启后的流量调度方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |