CN109743358A - 异步消息接口熔断控制方法、装置、计算机设备及存储介质 - Google Patents

异步消息接口熔断控制方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN109743358A
CN109743358A CN201811527541.4A CN201811527541A CN109743358A CN 109743358 A CN109743358 A CN 109743358A CN 201811527541 A CN201811527541 A CN 201811527541A CN 109743358 A CN109743358 A CN 109743358A
Authority
CN
China
Prior art keywords
message
fuse cutout
redis queue
result
request
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.)
Granted
Application number
CN201811527541.4A
Other languages
English (en)
Other versions
CN109743358B (zh
Inventor
彭光宗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Puhui Enterprise Management Co Ltd
Original Assignee
Ping An Puhui Enterprise Management Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Ping An Puhui Enterprise Management Co Ltd filed Critical Ping An Puhui Enterprise Management Co Ltd
Priority to CN201811527541.4A priority Critical patent/CN109743358B/zh
Publication of CN109743358A publication Critical patent/CN109743358A/zh
Application granted granted Critical
Publication of CN109743358B publication Critical patent/CN109743358B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本申请实施例提供了一种异步消息接口熔断控制方法、装置、计算机设备及存储介质。本申请实施例属于服务器性能监控中的状态监控,基于Reids队列,若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;若熔断开关关闭,且Redis队列的长度超过预设长度阈值,发送试探请求至第三方系统接口,并将熔断开关打开,且设置熔断开关的过期时间,若服务器从消息中间件中获取到消息结果,且判断消息结果满足预设条件,关闭熔断开关,且将所述Redis队列清空,若未获取到消息结果,或者消息结果不满足预设条件,保持熔断开关打开,以实现异步消息接口的自动熔断和自动恢复,整个过程无需人工介入,能够保护服务器本系统和第三方系统。

Description

异步消息接口熔断控制方法、装置、计算机设备及存储介质
技术领域
本申请涉及服务器管理技术领域,尤其涉及一种异步消息接口熔断控制方法、装置、计算机设备及计算机可读存储介质。
背景技术
目前业界有基于Hystrix的同步接口的熔断方法。异步消息接口是指在接口中会去调第三方接口处理事务,由于这个事务处理是耗时操作,所以第三方接口会给异步消息接口立刻返回成功和一个凭证,第三方接口将这个耗时操作单独处理,处理完以后将结果放在消息队列(英文为Message Queue,简称为MQ)这类的消息中间件中,然后异步消息接口根据返回的凭证去MQ取结果,如果结果是成功,异步消息接口才算是调用成功。但Hystrix的熔断不能满足异步消息接口得到结果的应用场景。
发明内容
本申请实施例提供了一种异步消息接口熔断控制方法、装置、计算机设备及计算机可读存储介质,能够解决传统技术中Hystrix的熔断不能满足异步消息接口得到结果的问题。
第一方面,本申请实施例提供了一种异步消息接口熔断控制方法,所述方法包括:若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,所述过期时间是指所述熔断开关由打开设置为关闭的时间;若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果;若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
第二方面,本申请实施例还提供了一种异步消息接口熔断控制装置,包括:第一判断单元,用于若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;第二判断单元,用于若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;发送单元,用于若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,所述过期时间是指所述熔断开关由打开设置为关闭的时间;入队单元,用于若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;第三判断单元,用于判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果;第四判断单元,用于若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;恢复单元,用于若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;熔断单元,用于若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
第三方面,本申请实施例还提供了一种计算机设备,其包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现所述异步消息接口熔断控制方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器执行所述异步消息接口熔断控制方法。
本申请实施例提供了一种异步消息接口熔断控制方法、装置、计算机设备及计算机可读存储介质。本申请实施例涉及服务器性能监控中的状态监控,基于Reids队列,若接收到消息合成请求,若所述Reids队列的熔断开关关闭,且所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口,并将所述熔断开关打开,且设置所述熔断开关的过期时间,若服务器从消息中间件中获取到所述消息结果,且判断所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空,若未获取到所述消息结果,或者所述消息结果不满足所述预设条件,保持所述熔断开关打开,从而实现异步消息接口的自动熔断和自动恢复,整个过程无需任何人工介入,而且能够保护服务器本系统和第三方系统。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的异步消息接口熔断控制方法的应用场景示意图;
图2为本申请实施例提供的异步消息接口熔断控制方法的流程示意图;
图3为本申请一个实施例提供的异步消息处理交互过程示意图;
图4为本申请实施例提供的异步消息接口熔断控制方法中调用第三方系统接口流程示意图;
图5为本申请另一个实施例提供的异步消息接口熔断控制方法中熔断控制流程示意图;
图6为本申请实施例提供的异步消息接口熔断控制方法的子流程示意图;
图7为本申请实施例提供的异步消息接口熔断控制装置的示意性框图;
图8为本申请实施例提供的异步消息接口熔断控制装置的另一个示意性框图;以及
图9为本申请实施例提供的计算机设备的示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1,图1为本申请实施例提供的异步消息接口熔断控制方法的应用场景示意图。所述应用场景包括:
(1)终端。图1所示终端向服务器请求提供服务,比如向服务器请求打开网页,或者终端向服务器提供下载服务等服务请求。所述终端可以为智能手机、智能手表、笔记本电脑、平板电脑或者台式电脑等电子设备,终端通过有线网络或者无线网络访问服务器。
(2)服务器。服务器向终端返回服务请求的结果,比如提供HTML5页面等。服务器采用异步消息接口,异步消息接口基于Redis的缓存和队列,为一种计算机设备,可以为单台服务器或者分布式的服务器集群,也可以为云服务器,接收外部终端的访问,通过有线网络或者无线网络与终端连接,并调用第三方系统处理事务,以向终端返回服务请求的结果。
(3)第三方系统。第三方系统分担服务器负载,使用同步串行口处理事务,为分布式系统中的组成部分,接收服务器的异步消息接口调用处理事务,给异步消息接口返回调用成功和一个凭证,处理完所述事务后将消息结果存放在消息中间件系统中,服务器的异步消息接口根据凭证获取消息结果,将消息结果和服务器自身的信息合成后作为服务请求的结果返回给终端。
(4)消息中间件系统。英文为Active Messenger,消息中间件使用消息队列MQ来处理大并发情况下数据库操作频繁带来的性能问题。消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
图1中的各个主体工作过程如下:终端向服务器发送服务请求,服务器的异步消息接口接收到服务请求后,调用第三方系统接口处理事务。若服务器成功调用第三方系统接口处理事务,会进行以下过程:①服务器调用第三方系统接口处理事务;②第三方系统接收到服务器调用后,会返回给服务器调用成功和一个凭证;③第三方系统将服务器调用的事务处理完后,会将消息结果存放到MQ消息中间件系统;④服务器根据获取的凭证从消息中间件中获取消息结果,将消息结果和自身的信息进行合成后,将服务结果返回给终端。
其中,服务器去调用第三方系统接口处理事务,由于第三方系统对这个事务处理是耗时操作,同时,服务器要处理大量数据,因此通常采用异步消息,在调用第三方系统接口处理事务时,会进行以下步骤:服务器若接收到异步消息的消息合成请求,检测Redis队列的熔断开关是否关闭;若所述熔断开关打开,直接返回给终端调用失败,不再调用第三方系统接口;若所述熔断开关关闭,判断Redis队列的长度是否超过预设长度阈值;若判断所述Redis队列的长度未超过预设长度阈值,将所述服务请求入队Redis队列中,调用第三方系统接口处理事务,若判断所述Redis队列的长度超过预设长度阈值,发送试探请求至第三方系统接口以测试第三方系统是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间;判断是否从消息中间件中获取到消息结果,所述消息结果由第三方系统存放在消息中间件中,以检测所述第三方系统接口是否处于正常状态;若获取到所述消息结果,且所述消息结果满足预设条件,判断所述第三方系统接口处于正常状态,关闭所述熔断开关,且将所述Redis队列清空;若未获取到所述消息结果,或者所述消息结果不满足所述预设条件,判断所述第三方系统接口处于异常状态,将所述试探请求从所述Redis队列中移除,保持所述熔断开关打开。
需要说明的是,图1中仅仅示意出智能手机作为终端,在实际操作过程中,与服务器相连接的终端可以有多个,并且类型也可以不限于图1中所示,所述终端还可以为智能手表、笔记本电脑或者平板电脑等电子设备,服务器也可以为服务器集群或者云服务台等,上述异步消息接口熔断控制方法的应用场景仅仅用于说明本申请技术方案,并不用于限定本申请技术方案。
图2为本申请实施例提供的异步消息接口熔断控制方法的示意性流程图。该异步消息接口熔断控制方法应用于图1中的服务器中,以完成异步消息接口熔断控制方法的全部或者部分功能。
图2是本申请实施例提供的异步消息接口熔断控制方法的流程示意图。如图2所示,该方法包括以下步骤S210-S280:
S210、接收到消息合成请求。
具体地,服务器接收终端发送的服务请求,服务器的异步消息接口接收到服务请求后,会生成消息合成请求,将服务器自身的信息和从第三方系统接口获得的消息结果进行合成,将消息合成结果返回给终端。具体过程请参阅图3,图3为本申请一个实施例提供的异步消息处理交互过程示意图,如图3所示,该过程包括以下步骤:
1)终端发起服务请求;
2)服务器接收到服务请求后,生成消息合成请求;
3)根据消息合成请求,服务器调用第三方系统处理事务;
4)第三方系统返回给服务器调用成功和一个凭证;
5)第三方系统采取耗时操作处理事务,获取消息结果;
6)第三方系统将消息结果存放到消息中间件中;
7)服务器根据凭证到消息中间件中获取消息结果;
8)服务器将消息结果和自身的信息进行合成,获取请求结果,其中,自身的信息包括服务器的地址以及终端的地址,将消息结果和自身的信息合成后,向终端准确返回请求结果;
9)服务器将请求结果作为终端需要的服务请求的结果返回给终端。
比如,一个网站采用分布式系统提供网页服务,终端请求打开一个网页A的服务请求,WEB服务器接收终端发送的打开网页A的服务请求后,采用异步消息处理,由于网页A的数据存储在第三方系统,网页A的数据由第三方系统获取后发送至WEB服务器,由WEB服务器进行合成后发送给终端,会进行以下过程:
1)终端发起打开网页A的服务请求;
2)WEB服务器接收到服务请求后,生成网页A的消息合成请求,从第三方系统获取网页A的数据;
3)服务器根据生成网页A的消息合成请求,调用第三方系统处理事务,也就是调用第三方系统发送网页A的数据至服务器;
4)第三方系统成功接收到服务器的调用后,第三方系统返回给服务器调用成功和一个凭证;
5)第三方系统采取耗时操作处理事务,从服务器中获取网页A的数据;
6)第三方系统将网页A的数据存放到消息中间件中;
7)服务器根据凭证到消息中间件中获取网页A的数据;
8)服务器将网页A的数据和自身的信息进行合成,获取发送给终端的请求结果,其中,自身的信息包括服务器的地址以及终端的地址或者标识等数据,将网页A的数据和服务器的地址以及终端的地址或者标识进行合成后,才能将网页A的数据包成功返回给终端;
9)服务器将请求网页A返回给终端,终端打开网页A。
S220、若接收到消息合成请求,判断Redis队列的熔断开关是否关闭。
其中,本申请实施例中采用Redis的缓存和队列,Redis是一个开源的内存存储的数据结构服务器,通常被称为数据结构服务器,可用作数据库,高速缓存和消息队列代理。
熔断,一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,采用的一种保护措施,熔断亦称为过载保护。熔断开关,是指熔断的开启和关闭的,其中,采用Redis键值对表示熔断开关是否打开,采用Redis队列的长度表示触发熔断开关的阈值。其中,键值对可以为一对数字,Redis键值为其中一个数字时,所述熔断开关表示打开,Redis键值为另一个数字时,所述熔断开关表述关闭,比如,设置熔断开关的键值“KEY=1”表示熔断开启,键值“KEY=0”表示熔断关闭,另外,键值对还可以表示为若键值为空,表示所述熔断开关为关闭,若所述键值不为空,键值为任意一数字或者字母,也就是键值存在,表示所述熔断开关打开。若以“1”和“0”表示所述键值对,若设置触发Redis队列的熔断开关的阈值为10,Redis队列的长度大于或者等于10,Redis队列的熔断开关开启,设置键值“KEY=1”,Redis队列不再接收任务,Redis队列的长度小于10,Redis队列的熔断开关关闭,设置键值“KEY=0”,Redis队列处于接收任务的状态。
具体地,服务器接收到服务请求,处理消息合成请求时,由于采用分布式系统和异步消息处理,服务器处理的服务请求数量较大,为了保证系统的正常运行,采取熔断措施,在满足预设条件时,启动熔断,保证系统正常运行,当系统不满足预设条件时,关闭熔断,也保证系统正常运行,所述预设条件,比如根据Redis队列的长度,也就是服务请求数量的大小。因此,服务器接收到终端的服务请求,进行任务处理,首先要判断熔断开关的状态,若熔断开关打开,服务器无法提供服务请求,表明第三方系统发生故障,则直接返回给用户调用失败,不再调用第三方系统接口,结束终端和服务器之间的交互过程,第三方系统出现故障时,用户无需长时间等待结果,本系统会马上返回错误提示,提升对终端请求的处理效率;若熔断开关关闭,服务
器可以进行提供正常服务器。比如,终端请求打开一个网页,服务器接收到终端打开网页的服务请求后,会进行任务处理,进行消息合成处理,首先检测Redis队列的熔断开关是否关闭,若Redis队列的熔断开关关闭,去调用第三方系统接口去数据库调取网页数据,将网页数据存储到消息中间件中,服务器从消息中间件中获取该网页数据,将该网页数据与自身的信息合成,将消息合成结果作为终端请求打开网页的网页数据返回给终端,若Redis队列的熔断开关打开,直接返回给用户调用失败,不再调第三方接口。
S230、若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;
S231、若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;
S240、若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,其中,所述过期时间是指所述熔断开关由打开设置为关闭的时间;
其中,所述试探请求是指在所述过期时间内向所述第三方系统接口只发送一次以试探所述第三方系统接口状态是否正常的请求。所述试探请求是服务器在所述Redis队列外接收的外部终端的服务请求,将所述服务请求发送给第三方系统接口,以测试所述第三方系统接口状态是否正常。由于所述熔断开关处于关闭状态,而又判断所述Redis队列的长度超过预设长度阈值,因此需要判断第三方系统的状态,判断第三方系统能否提供正常的处理,因此服务器通过试探请求来试探测试第三方系统的状态是否正常。所述试探请求是服务器在所述Redis队列之外接收终端发送的服务请求,所述试探请求在所述过期时间内向所述第三方系统接口只发送一次,以试探所述第三方系统接口状态的请求,所述试探请求可以入队所述Redis队列,也可以不入队所述Redis队列之中。服务器在Redis队列外获取到外部终端的一个请求作为试探请求,即将Redis队列的熔断开关打开,不再接收外部终端的服务请求,以避免第三方系统处于故障状态而又接收过多外部服务请求导致服务器出现故障,由于在过期时间内不再接受外部的服务请求,服务器在过期时间内发送试探请求只能发送一次。由于所述试探请求是指在过期时间内试探第三方系统接口状态是否正常并且只发一次的请求,与普通请求的区别在于,试探请求是在Redis队列外的一个请求,试探请求可以加入到Redis队列中,也可以不加入到Redis队列中,是在过期时间内只发一次,并且由于Redis队列的熔断开关打开,服务器在试探请求之后不再接收新的服务请求。
所述过期时间是指所述熔断开关由打开设置为关闭的时间,也就是熔断开关打开的预设时间,超过这个预设时间,所述熔断开关将被设置为关闭。所述过期时间可以设置为5秒、10秒或者30秒等时间。发送试探请求时,由于不确定第三方系统的状态,为了避免服务器过载导致服务器瘫痪,将所述Redis队列的熔断开关打开,不再接收所述Redis队列之外的服务请求。若服务器需再次发送试探请求,需要将所述熔断开关关闭,才能再次接收所述Redis队列之外的服务请求,因此需要设置所述熔断开关的过期时间,在所述过期时间内,所述试探请求向所述第三方系统只发送一次,若服务器未得到试探请求的回应,在过期时间后,所述熔断开关由打开设置为关闭,服务器可以继续接收所述Redis队列之外的服务请求。
具体地,若服务器判断熔断开关是关闭的,则进一步判断Redis队列的长度是否超过预设阈值,如果服务器判断Redis队列没有超过预设阈值,则服务器将服务请求加入Redis队列中,也就是若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列,正常调用第三方系统接口处理事务,也就是调用第三方的SSP(Synchronous Serial Port同步串行口),进行正常处理;如果服务器判断Redis队列的长度超过预设阈值,则发送一个试探请求到第三方系统接口SSP,调用第三方系统接口SSP处理事务,试探请求可以加入到Redis队列中,也可以不加入到Redis队列中,然后将Redis的熔断开关设置为打开,并设置过期时间,根据第三方系统接口的反馈判断第三方系统的状态,即第三方系统是处于故障状态还是处于正常状态。
请参阅图4,图4为本申请实施例提供的异步消息接口熔断控制方法中调用第三方系统接口流程示意图。如图4所示,该流程包括以下步骤:
S410、接收到异步消息合成请求;
S420、从Redis取熔断开关,以判断所述熔断开关是否存在;
S430、判断所述熔断开关是否存在,若所述熔断开关存在,所述熔断开关处于打开状态,结束流程,不再调用第三方系统接口,若所述熔断开关不存在,进入步骤S440;
S440、判断Redis队列的长度是否超过预设长度预设阈值,若Redis队列的长度超过预设长度预设阈值,进入步骤S450,若Redis队列的长度未超过预设长度预设阈值,进入步骤S460;
S450、发送试探请求至第三方系统接口,调用第三方系统的SSP接口处理试探请求涉及的事务,并将试探请求的请求身份标识码存入Redis队列,并进入步骤S451;
S451、Redis队列存熔断开关,也就是Redis队列打开熔断开关,并设置熔断开关打开的过期时间,进入步骤S470;
S460、将所述异步消息合成请求入队所述Redis队列,进入步骤S470;
S470、调用第三方系统接口处理所述异步消息合成请求。
所述若所述熔断开关关闭,且判断所述Redis队列的长度超过预设长度阈值,发送试探请求至所述第三方系统接口,并将所述熔断开关打开,且设置所述熔断开关的过期时间,也就是,若所述熔断开关关闭,获取所述Redis队列的长度,以判断所述Redis队列的长度是否超过预设长度阈值;若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列,以调用第三方系统接口进行处理;若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至所述第三方系统接口,并将所述熔断开关打开,且设置所述熔断开关的过期时间。
S250、判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果。
其中,服务器判断从消息中间件中是否获取到消息结果,所述消息结果由第三方系统根据服务器的调用,在独立处理完调用事务后,将处理事务结果存放在消息中间件中,服务器以是否能够获得消息结果检测所述第三方系统接口是否处于正常状态,若服务器获得满足预设条件的消息结果,判断所述第三方系统接口处于正常状态,否则,判断所述第三方系统接口处于异常状态。
具体地,服务器发送试探请求后,会在预设时间后,根据获取的第三方系统返回的凭证从消息中间件中取消息结果,判断是否从消息中间件MQ中获取到试探请求的结果,以判断所述第三方系统是否处于正常状态。由于异步消息接口会去调用第三方系统接口处理事务,同时第三方系统对这个事务处理是耗时操作,第三方系统接口接收到所述事务处理后,会给异步消息接口返回成功和一个凭证,第三方系统接口将这个耗时操作单独处理,处理完以后将消息结果放在MQ这类的消息中间件中,然后异步消息接口根据返回的凭证去MQ取消息结果。服务器从MQ中间件中获取消息结果,如果结果是成功,异步消息接口才算是调用成功,如果结果是失败,异步消息接口调用失败,结束终端和服务器之间的交互过程。
S260、若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;
S270、若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;
S280、若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
其中,若服务器从消息中间件中获取到所述消息结果,且所述消息结果满足预设条件,判断所述第三方系统接口处于正常状态,关闭所述熔断开关,且将所述Redis队列清空,第三方系统恢复后,本系统无需人工介入,系统自动恢复调用;若服务器从消息中间件中未获取到所述消息结果,或者所述消息结果不满足所述预设条件,判断所述第三方系统接口处于异常状态,将所述试探请求从所述Redis队列中移除,保持所述熔断开关打开,第三方系统发生故障,自动熔断能够保护本系统和第三方接口的系统。
具体地,服务器在MQ消费端取消息结果,如果是失败,表明第三方系统接口处于故障状态,则结束终端和服务器之间的交互过程;如果是成功,则进一步判断是否是试探请求,如果是,表明第三方系统已经恢复,将Redis的熔断开关关闭,并且将Redis队列清空,表示第三方系统已经恢复,如果不是试探请求,则Redis出队列,判断Redis队列长度为预设阈值的一半,则认为第三方系统已经恢复,则将熔断开关设置成关闭,并且清空Redis队列。
本申请实施例涉及服务器性能监控中的状态监控,基于Reids队列,若接收到消息合成请求,若所述Reids队列的熔断开关关闭,且所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口,并将所述熔断开关打开,且设置所述熔断开关的过期时间,若服务器从消息中间件中获取到所述消息结果,且判断所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空,若未获取到所述消息结果,或者所述消息结果不满足所述预设条件,保持所述熔断开关打开,从而实现异步消息接口的自动熔断和自动恢复,整个过程无需任何人工介入,而且能够保护服务器本系统和第三方系统。
在一个实施例中,所述若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空的步骤包括
若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空;
若所述消息结果中未包含对应所述试探请求的反馈信息,将所述消息结果对应的消息合成请求从所述Redis队列中移除;
若将所述消息结果对应的消息合成请求已从所述Redis队列中移除,且所述Redis队列的长度与所述预设长度阈值满足预设关系,关闭所述熔断开关,且将所述Redis队列清空。
其中,由于Redis队列是采用栈结构,任务请求添加至Redis队列中,称为入队列或者入队;完成的请求,需要从Redis队列移除,称为出队列或者出队。
具体地,若获取到所述消息结果,判断所述消息结果中是否包含对应所述试探请求的反馈信息;若所述消息结果中包含所述反馈信息,且所述试探请求包含在所述Redis队列中,表明第三方系统已经恢复正常,关闭所述熔断开关,且将所述Redis队列清空;若所述消息结果中未包含所述反馈信息,将所述消息结果对应的消息合成请求从所述Redis队列中移除;若将所述消息结果对应的消息合成请求从所述Redis队列中移除,且判断所述Redis队列的长度与所述预设长度阈值满足预设关系,也表明第三方系统已经恢复正常,关闭所述熔断开关,且将所述Redis队列清空,其中,所述所述Redis队列的长度与所述预设长度阈值满足预设关系的步骤包括:所述Redis队列的长度为所述预设长度阈值的一半。
请参阅图5,图5为本申请另一个实施例提供的异步消息接口熔断控制方法中熔断控制流程示意图。如图5所示,包括以下步骤:
S510、服务器将从消息中间件中获取的消息结果与自身的信息进行异步消息合成,其中,异步消息合成,也就是MQCP合成,MQ指消息中间件,C指客户端Consumer,也可以称之为消费端,在本申请实施例中是指异步消息接口,P指生产端Producer,在本申请实施例中也就是第三方系统的SSP接口;
S520、若服务器判断合成结果成功,进入步骤S530,若服务器判断合成结果失败,结束流程;
S530、判断试探请求的请求身份标识码reqID是否存在,若试探请求的请求身份标识码reqID存在,进入步骤S540,若试探请求的请求身份标识码reqID不存在,进入步骤S560;
S540、判断是否等于试探请求的请求身份标识码reqID,如果是,进入步骤S550,如果否,进入步骤S560;
S550、表明第三方系统已经恢复正常,关闭所述熔断开关,且将所述Redis队列清空;
S560、将所述消息结果对应的消息合成请求出队所述Redis队列,也就是将所述消息结果对应的消息合成请求从所述Redis队列中移除。
在一个实施例中,所述若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述试探请求的请求身份标识码包含在所述消息结果中,判断所述试探请求的请求身份标识码是否等于所述Redis队列中的请求身份标识码;
若所述试探请求的请求身份标识码等于所述Redis队列中的请求身份标识码,关闭所述熔断开关,且将所述Redis队列清空。
进一步地,若所述试探请求的请求身份标识码不等于所述Redis队列中的请求身份标识码,将所述试探请求从所述Redis队列中移除;
所述若所述消息结果中未包含对应所述试探请求的反馈信息,将所述消息结果对应的消息合成请求从所述Redis队列中移除的步骤包括:
若所述试探请求的请求身份标识码未包含在所述消息结果中,将所述消息结果对应的消息合成请求从所述Redis队列中移除。
其中,请求身份标识码,英文为request identification,简写为reqID,是用来区分异步消息接口中不同异步消息请求的唯一身份标识。
具体地,以请求身份标识码reqID识别所述试探请求,判断所述试探请求的请求身份标识码是否包含在所述消息结果中,也就是判断所述试探请求的请求身份标识码reqID是否包含在所述消息结果中。若所述试探请求的请求身份标识码包含在所述消息结果中,判断所述试探请求的请求身份标识码是否等于所述Redis队列中的请求身份标识码;若所述试探请求的请求身份标识码等于所述Redis队列中的请求身份标识码,表明第三方系统已经恢复正常,关闭所述熔断开关,且将所述Redis队列清空,服务器可以正常调用第三方系统;若所述试探请求的请求身份标识码不等于所述Redis队列中的请求身份标识码,不能判断第三方系统恢复正常和整个服务器系统恢复正常,将所述试探请求从所述Redis队列中移除,表明所述第三方系统对所述Redis队列中的任务未处理完毕,所述第三方系统还处于故障之中;若所述试探请求的请求身份标识码不包含在所述消息结果中,将所述消息结果对应的消息合成请求从所述Redis队列中移除。
在一个实施例中,所述判断是否从消息中间件中获取到消息结果的步骤包括:
判断是否从消息中间件中获取到所述试探请求的反馈信息;
若获取到所述试探请求的反馈信息,判定从所述消息中间件中获取到所述消息结果;
若未获取到所述试探请求的反馈信息,判定未从所述消息中间件中获取到所述消息结果。
具体地,服务器判断是否从消息中间件中获取到所述试探请求的消息结果,也就是是否获取到所述试探请求的反馈信息,以检测所述第三方系统是否处于正常状态;若获取到所述试探请求的反馈信息,判定从所述消息中间件中获取到所述消息结果,进一步判断所述第三方系统处于正常状态,关闭所述熔断开关,且将所述Redis队列清空;若未获取到所述试探请求的反馈信息,判定未从所述消息中间件中获取到所述消息结果,进一步判断所述第三方系统接口处于异常状态,将所述试探请求从所述Redis队列中移除,保持所述熔断开关打开。
在本申请实施例中,通过若Redis队列的熔断开关关闭,且判断Redis队列的长度超过预设长度阈值,发送一个试探请求到第三方系统接口,并且将熔断开关打开,同时设置过期时间,如果成功获取试探请求的消息结果,表明第三方系统已经恢复,将发送试探请求时打开的熔断开关关闭,并且将Redis队列清空,从而实现采取自动熔断保护本系统和第三方接口的系统,并能实现第三方系统恢复后,系统自动恢复调用。
在一个实施例中,所述判断Redis队列的熔断开关是否关闭的步骤包括:
判断所述熔断开关的键值是否为预设阈值;
若所述熔断开关的键值为所述预设阈值,判定所述Redis队列的熔断开关关闭;
若所述熔断开关的键值不为所述预设阈值,判定所述Redis队列的熔断开关打开。
具体地,Redis队列采用Redis键值对表示熔断开关是否打开,采用Redis队列的长度表示触发熔断开关的阈值。其中,键值可以为数字或者字母等标识符。若键值为数字,Redis键值为一个预设数字时,所述熔断开关表示打开,Redis键值不为该预设数字时,比如,Redis键值为另外数字时,或者Redis键值为另外的预设数字时,所述熔断开关表述关闭。比如,设置熔断开关的键值“KEY=1”表示熔断开启,键值“KEY=0”表示熔断关闭。判断所述熔断开关的键值是否为预设阈值,若所述熔断开关的键值为所述预设阈值,比如,键值“KEY=0”表示熔断关闭,若判断键值“KEY=0”,判定所述Redis队列的熔断开关关闭,若所述熔断开关的键值不为所述预设阈值,若判断键值不为“KEY=0”,判定所述Redis队列的熔断开关打开。
在一个实施例中,所述判断所述熔断开关的键值是否为预设阈值的步骤包括:
判断所述熔断开关是否为空;
若所述熔断开关为空,判定所述熔断开关的键值为所述预设阈值;
若所述熔断开关不为空,判定所述熔断开关的键值不为所述预设阈值。
具体地,服务器从所述Redis队列中取熔断开关,以判断所述熔断开关是否存在,若所述熔断开关存在,所述熔断开关不为空,若所述熔断开关不存在,所述熔断开关为空。若所述熔断开关为空,判定所述熔断开关的键值为所述预设阈值,判断所述熔断开关不存在,所述熔断开关关闭;若所述熔断开关不为空,判定所述熔断开关的键值不为所述预设阈值,判断所述熔断开关存在,所述熔断开关打开。比如,Redis队列的键值为空,表示所述熔断开关为关闭,若所述键值不为空,键值为任意一数字或者字母等标识符,也就是键值存在,表示所述熔断开关打开。若以空和非空表示键值对,若设置触发Redis队列的熔断开关的阈值为10,Redis队列的长度大于或者等于10,Redis队列的熔断开关开启,设置键值“KEY”为非空,Redis队列不再接收任务,Redis队列的长度小于10,Redis队列的熔断开关关闭,设置键值“KEY”为空,Redis队列处于接收任务的状态。
需要说明的是,上述各个实施例所述的异步消息接口熔断控制方法,可以根据需要将不同实施例中包含的技术特征重新进行组合,以获取组合后的实施方案,但都在本申请要求的保护范围之内。
请参阅图7,图7为本申请实施例提供的异步消息接口熔断控制装置的示意性框图。对应于上述异步消息接口熔断控制方法,本申请实施例还提供一种异步消息接口熔断控制装置。请参阅图7,该异步消息接口熔断控制装置包括用于执行上述异步消息接口熔断控制方法的单元,该装置可以被配置于服务器等计算机设备中。具体地,请参阅图7,该异步消息接口熔断控制装置700包括第一判断单元701、第二判断单元702、发送单元703、入队单元704、第三判断单元705、第四判断单元706、恢复单元707以及熔断单元708。
其中,第一判断单元701,用于若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;
第二判断单元702,用于若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;
发送单元703,用于若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,所述过期时间是指所述熔断开关由打开设置为关闭的时间;
入队单元704,用于若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;
第三判断单元705,用于判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果;
第四判断单元706,用于若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;
恢复单元707,用于若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;
熔断单元708,用于若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
在一个实施例中,所述恢复单元707,用于若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空。
在一个实施例中,所述恢复单元707,用于若所述试探请求的请求身份标识码包含在所述消息结果中,判断所述试探请求的请求身份标识码是否等于所述Redis队列中的请求身份标识码;若所述试探请求的请求身份标识码等于所述Redis队列中的请求身份标识码,关闭所述熔断开关,且将所述Redis队列清空。
在一个实施例中,所述恢复单元707,用于若所述消息结果中未包含对应所述试探请求的反馈信息,将所述消息结果对应的消息合成请求从所述Redis队列中移除;若将所述消息结果对应的消息合成请求已从所述Redis队列中移除,且所述Redis队列的长度与所述预设长度阈值满足预设关系,关闭所述熔断开关,且将所述Redis队列清空。
在一个实施例中,所述第三判断单元705,用于判断是否从消息中间件中获取到所述试探请求的反馈信息;若获取到所述试探请求的反馈信息,判定从所述消息中间件中获取到所述消息结果;若未获取到所述试探请求的反馈信息,判定未从所述消息中间件中获取到所述消息结果。
请参阅图8,图8为本申请实施例提供的异步消息接口熔断控制装置的另一个示意性框图。如图8所示,所述第一判断单元701包括:
第一判断子单元7010,用于判断所述熔断开关的键值是否为预设阈值;
第二判断子单元7011,用于若所述熔断开关的键值为所述预设阈值,判定所述Redis队列的熔断开关关闭;
第三判断子单元7012,用于若所述熔断开关的键值不为所述预设阈值,判定所述Redis队列的熔断开关打开。
在一个实施例中,所述第一判断子单元7010,用于判断所述熔断开关是否为空;若所述熔断开关为空,判定所述熔断开关的键值为所述预设阈值;若所述熔断开关不为空,判定所述熔断开关的键值不为所述预设阈值。
需要说明的是,所属领域的技术人员可以清楚地了解到,上述流量调配装置和各单元的具体实现过程,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。
同时,上述异步消息接口熔断控制装置中各个单元的划分和连接方式仅用于举例说明,在其他实施例中,可将异步消息接口熔断控制装置按照需要划分为不同的单元,也可将异步消息接口熔断控制装置中各单元采取不同的连接顺序和方式,以完成上述异步消息接口熔断控制装置的全部或部分功能。
上述异步消息接口熔断控制装置可以实现为一种计算机程序的形式,该计算机程序可以在如图9所示的计算机设备上运行。
请参阅图9,图9是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备900可以是服务器,也可以是其他设备中的组件或者部件。
参阅图9,该计算机设备900包括通过系统总线901连接的处理器902、存储器和网络接口905,其中,存储器可以包括非易失性存储介质903和内存储器904。
该非易失性存储介质903可存储操作系统9031和计算机程序9032。该计算机程序9032被执行时,可使得处理器902执行一种上述异步消息接口熔断控制方法。
该处理器902用于提供计算和控制能力,以支撑整个计算机设备900的运行。
该内存储器904为非易失性存储介质903中的计算机程序9032的运行提供环境,该计算机程序9032被处理器902执行时,可使得处理器902执行一种上述异步消息接口熔断控制方法。
该网络接口905用于与其它设备进行网络通信。本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备900的限定,具体的计算机设备900可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图9所示实施例一致,在此不再赘述。
其中,所述处理器902用于运行存储在存储器中的计算机程序9032,以实现如下步骤:若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,其中,所述过期时间是指所述熔断开关由打开设置为关闭的时间;若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果;若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
在一实施例中,所述处理器902在实现上述步骤时,所述若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空。
在一实施例中,所述处理器902在实现上述步骤时,所述若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述试探请求的请求身份标识码包含在所述消息结果中,判断所述试探请求的请求身份标识码是否等于所述Redis队列中的请求身份标识码;
若所述试探请求的请求身份标识码等于所述Redis队列中的请求身份标识码,关闭所述熔断开关,且将所述Redis队列清空。
在一实施例中,所述处理器902在实现上述步骤时,所述若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述消息结果中未包含对应所述试探请求的反馈信息,将所述消息结果对应的消息合成请求从所述Redis队列中移除;
若将所述消息结果对应的消息合成请求已从所述Redis队列中移除,且所述Redis队列的长度与所述预设长度阈值满足预设关系,关闭所述熔断开关,且将所述Redis队列清空。
在一实施例中,所述处理器902在实现上述步骤时,所述判断是否从消息中间件中获取到消息结果的步骤包括:
判断是否从消息中间件中获取到所述试探请求的反馈信息;
若获取到所述试探请求的反馈信息,判定从所述消息中间件中获取到所述消息结果;
若未获取到所述试探请求的反馈信息,判定未从所述消息中间件中获取到所述消息结果。
在一实施例中,所述处理器902在实现上述步骤时,所述判断Redis队列的熔断开关是否关闭的步骤包括:
判断所述熔断开关的键值是否为预设阈值;
若所述熔断开关的键值为所述预设阈值,判定所述Redis队列的熔断开关关闭;
若所述熔断开关的键值不为所述预设阈值,判定所述Redis队列的熔断开关打开。
在一实施例中,所述处理器902在实现上述步骤时,所述判断所述熔断开关的键值是否为预设阈值的步骤包括:
判断所述熔断开关是否为空;
若所述熔断开关为空,判定所述熔断开关的键值为所述预设阈值;
若所述熔断开关不为空,判定所述熔断开关的键值不为所述预设阈值。
应当理解,在本申请实施例中,处理器902可以是中央处理单元(CentralProcessing Unit,CPU),该处理器902还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来完成,该计算机程序可存储于一计算机可读存储介质。该计算机程序被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。
因此,本申请还提供一种存储介质。该存储介质可以为非易失性的计算机可读存储介质,该存储介质存储有计算机程序,该计算机程序被处理器执行时使处理器执行以上各实施例中所描述的异步消息接口熔断控制方法的步骤。
所述存储介质可以是前述设备的内部存储单元,例如设备的硬盘或内存。所述存储介质也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储介质还可以既包括所述设备的内部存储单元也包括外部存储设备。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述存储介质可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
本申请实施例中的步骤可以根据实际需要进行顺序调整、合并和删减。本申请实施例装置中的单元可以根据实际需要进行合并、划分和删减。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机,终端,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
以上所述,仅为本申请的具体实施方式,但本申请明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种异步消息接口熔断控制方法,其特征在于,所述方法包括:
若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;
若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;
若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,其中,所述过期时间是指所述熔断开关由打开设置为关闭的时间;
若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;
判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果;
若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;
若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;
若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
2.根据权利要求1所述异步消息接口熔断控制方法,其特征在于,所述若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空。
3.根据权利要求2所述异步消息接口熔断控制方法,其特征在于,所述若所述消息结果中包含对应所述试探请求的反馈信息,且所述试探请求包含在所述Redis队列中,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述试探请求的请求身份标识码包含在所述消息结果中,判断所述试探请求的请求身份标识码是否等于所述Redis队列中的请求身份标识码;
若所述试探请求的请求身份标识码等于所述Redis队列中的请求身份标识码,关闭所述熔断开关,且将所述Redis队列清空。
4.根据权利要求1所述异步消息接口熔断控制方法,其特征在于,所述若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空的步骤包括:
若所述消息结果中未包含对应所述试探请求的反馈信息,将所述消息结果对应的消息合成请求从所述Redis队列中移除;
若将所述消息结果对应的消息合成请求已从所述Redis队列中移除,且所述Redis队列的长度与所述预设长度阈值满足预设关系,关闭所述熔断开关,且将所述Redis队列清空。
5.根据权利要求1所述异步消息接口熔断控制方法,其特征在于,所述判断是否从消息中间件中获取到消息结果的步骤包括:
判断是否从消息中间件中获取到所述试探请求的反馈信息;
若获取到所述试探请求的反馈信息,判定从所述消息中间件中获取到所述消息结果;
若未获取到所述试探请求的反馈信息,判定未从所述消息中间件中获取到所述消息结果。
6.根据权利要求1所述异步消息接口熔断控制方法,其特征在于,所述判断Redis队列的熔断开关是否关闭的步骤包括:
判断所述熔断开关的键值是否为预设阈值;
若所述熔断开关的键值为所述预设阈值,判定所述Redis队列的熔断开关关闭;
若所述熔断开关的键值不为所述预设阈值,判定所述Redis队列的熔断开关打开。
7.根据权利要求6所述异步消息接口熔断控制方法,其特征在于,所述判断所述熔断开关的键值是否为预设阈值的步骤包括:
判断所述熔断开关是否为空;
若所述熔断开关为空,判定所述熔断开关的键值为所述预设阈值;
若所述熔断开关不为空,判定所述熔断开关的键值不为所述预设阈值。
8.一种异步消息接口熔断控制装置,其特征在于,包括:
第一判断单元,用于若接收到消息合成请求,判断Redis队列的熔断开关是否关闭;
第二判断单元,用于若所述熔断开关关闭,判断所述Redis队列的长度是否超过预设长度阈值;
发送单元,用于若所述Redis队列的长度超过所述预设长度阈值,发送试探请求至第三方系统接口以测试所述第三方系统接口是否正常,并将所述熔断开关打开,且设置所述熔断开关的过期时间,所述过期时间是指所述熔断开关由打开设置为关闭的时间;
入队单元,用于若所述Redis队列的长度未超过所述预设长度阈值,将所述消息合成请求入队所述Redis队列;
第三判断单元,用于判断是否从消息中间件中获取到消息结果,所述消息结果是第三方系统被调用而进行处理事务所产生的且存放在所述消息中间件中的事务处理结果;
第四判断单元,用于若从所述消息中间件中获取到所述消息结果,判断所述消息结果是否满足预设条件;
恢复单元,用于若所述消息结果满足预设条件,关闭所述熔断开关,且将所述Redis队列清空;
熔断单元,用于若未从所述消息中间件中获取到所述消息结果,或者所述消息结果不满足所述预设条件,从所述Redis队列中移除所述试探请求,保持所述熔断开关打开。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器以及与所述存储器相连的处理器;所述存储器用于存储计算机程序;所述处理器用于运行所述存储器中存储的计算机程序,以执行如权利要求1-7任一项所述异步消息接口熔断控制方法的步骤。
10.一种计算机存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器执行如权利要求1-7中任一项所述异步消息接口熔断控制方法的步骤。
CN201811527541.4A 2018-12-13 2018-12-13 异步消息接口熔断控制方法、装置、计算机设备及存储介质 Active CN109743358B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811527541.4A CN109743358B (zh) 2018-12-13 2018-12-13 异步消息接口熔断控制方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811527541.4A CN109743358B (zh) 2018-12-13 2018-12-13 异步消息接口熔断控制方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN109743358A true CN109743358A (zh) 2019-05-10
CN109743358B CN109743358B (zh) 2022-10-21

Family

ID=66358957

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811527541.4A Active CN109743358B (zh) 2018-12-13 2018-12-13 异步消息接口熔断控制方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN109743358B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110414235A (zh) * 2019-07-08 2019-11-05 北京可信华泰信息技术有限公司 一种基于ARM TrustZone的主动免疫的双体系结构系统
CN110502345A (zh) * 2019-08-26 2019-11-26 北京博睿宏远数据科技股份有限公司 一种过载保护方法、装置、计算机设备及存储介质
CN110569639A (zh) * 2019-08-21 2019-12-13 上海易点时空网络有限公司 基于异步处理的应用程序设备激活方法及装置
CN110648052A (zh) * 2019-09-02 2020-01-03 浙江大搜车软件技术有限公司 风控决策方法、装置、计算机设备和存储介质
CN110674060A (zh) * 2019-09-06 2020-01-10 平安普惠企业管理有限公司 服务的熔断控制方法及装置
CN111404980A (zh) * 2019-09-29 2020-07-10 杭州海康威视系统技术有限公司 一种数据存储方法及一种对象存储系统
CN111459819A (zh) * 2020-03-31 2020-07-28 北京百度网讯科技有限公司 软件测试方法及装置、电子设备、计算机可读介质
CN112783733A (zh) * 2021-01-29 2021-05-11 好活(昆山)网络科技有限公司 一种接口熔断的控制方法、装置、介质及电子设备
CN113419892A (zh) * 2021-07-05 2021-09-21 山东云缦智能科技有限公司 一种自动熔断和恢复服务的实现方法
CN114884906A (zh) * 2022-03-23 2022-08-09 晨贝(天津)技术有限公司 基于快速恢复的失败重试通知方法及装置
CN116088714A (zh) * 2022-05-26 2023-05-09 荣耀终端有限公司 消息提示框处理方法和相关装置
WO2023083079A1 (zh) * 2021-11-12 2023-05-19 百果园技术(新加坡)有限公司 第三方系统监控系统、方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107181664A (zh) * 2016-03-10 2017-09-19 阿里巴巴集团控股有限公司 一种自动熔断的消息发送方法、装置及系统
CN108009075A (zh) * 2017-11-27 2018-05-08 南京联创信息科技有限公司 基于Hystrix框架的动态熔断判断方法
CN108664337A (zh) * 2018-03-23 2018-10-16 北京奇艺世纪科技有限公司 一种分布式系统的消息减压方法和装置
CN108681476A (zh) * 2018-05-08 2018-10-19 广州品唯软件有限公司 一种底层接口自动熔断方法及装置
CN108874531A (zh) * 2017-05-12 2018-11-23 北京京东尚科信息技术有限公司 用于熔断服务的方法、装置、系统及电子设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107181664A (zh) * 2016-03-10 2017-09-19 阿里巴巴集团控股有限公司 一种自动熔断的消息发送方法、装置及系统
CN108874531A (zh) * 2017-05-12 2018-11-23 北京京东尚科信息技术有限公司 用于熔断服务的方法、装置、系统及电子设备
CN108009075A (zh) * 2017-11-27 2018-05-08 南京联创信息科技有限公司 基于Hystrix框架的动态熔断判断方法
CN108664337A (zh) * 2018-03-23 2018-10-16 北京奇艺世纪科技有限公司 一种分布式系统的消息减压方法和装置
CN108681476A (zh) * 2018-05-08 2018-10-19 广州品唯软件有限公司 一种底层接口自动熔断方法及装置

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110414235A (zh) * 2019-07-08 2019-11-05 北京可信华泰信息技术有限公司 一种基于ARM TrustZone的主动免疫的双体系结构系统
CN110569639A (zh) * 2019-08-21 2019-12-13 上海易点时空网络有限公司 基于异步处理的应用程序设备激活方法及装置
CN110502345A (zh) * 2019-08-26 2019-11-26 北京博睿宏远数据科技股份有限公司 一种过载保护方法、装置、计算机设备及存储介质
CN110648052B (zh) * 2019-09-02 2022-07-01 浙江大搜车软件技术有限公司 风控决策方法、装置、计算机设备和存储介质
CN110648052A (zh) * 2019-09-02 2020-01-03 浙江大搜车软件技术有限公司 风控决策方法、装置、计算机设备和存储介质
CN110674060A (zh) * 2019-09-06 2020-01-10 平安普惠企业管理有限公司 服务的熔断控制方法及装置
CN111404980A (zh) * 2019-09-29 2020-07-10 杭州海康威视系统技术有限公司 一种数据存储方法及一种对象存储系统
CN111459819A (zh) * 2020-03-31 2020-07-28 北京百度网讯科技有限公司 软件测试方法及装置、电子设备、计算机可读介质
CN111459819B (zh) * 2020-03-31 2023-08-29 北京百度网讯科技有限公司 软件测试方法及装置、电子设备、计算机可读介质
CN112783733A (zh) * 2021-01-29 2021-05-11 好活(昆山)网络科技有限公司 一种接口熔断的控制方法、装置、介质及电子设备
CN112783733B (zh) * 2021-01-29 2022-07-22 好活(昆山)网络科技有限公司 一种接口熔断的控制方法、装置、介质及电子设备
CN113419892A (zh) * 2021-07-05 2021-09-21 山东云缦智能科技有限公司 一种自动熔断和恢复服务的实现方法
WO2023083079A1 (zh) * 2021-11-12 2023-05-19 百果园技术(新加坡)有限公司 第三方系统监控系统、方法、装置、设备及存储介质
CN114884906A (zh) * 2022-03-23 2022-08-09 晨贝(天津)技术有限公司 基于快速恢复的失败重试通知方法及装置
CN116088714A (zh) * 2022-05-26 2023-05-09 荣耀终端有限公司 消息提示框处理方法和相关装置

Also Published As

Publication number Publication date
CN109743358B (zh) 2022-10-21

Similar Documents

Publication Publication Date Title
CN109743358A (zh) 异步消息接口熔断控制方法、装置、计算机设备及存储介质
US10348809B2 (en) Naming of distributed business transactions
CN103201724B (zh) 在高可用性虚拟机环境中提供高可用性应用程序
CN104579905B (zh) 消息传递方法和系统及mom服务器、接收端
CN112235136B (zh) 一种网络文件系统备份方法、系统、终端及存储介质
CN108400904A (zh) 一种基于微服务架构的健康检查方法和装置
CN107832329A (zh) 页面资源获取方法及终端设备
CN112181677A (zh) 业务的处理方法和装置、存储介质、电子装置
CN110610376A (zh) 行为数据的响应方法、装置、计算机设备及存储介质
CN114217981A (zh) 银企直连的通信方法、装置、计算机设备和存储介质
CN112486707A (zh) 基于Redis的消息异步消费方法及装置
CN114327804B (zh) 基于区块链的分布式事务处理方法、装置、设备和介质
CN106874073A (zh) Soa架构下事务的实现方法和装置
CN108366098A (zh) 一种网络节点的数据交互方法及装置
CN110881224B (zh) 一种网络长连接方法、装置、设备及存储介质
CN111274047A (zh) 信息处理方法、终端、系统、计算机设备和存储介质
CN113127113A (zh) 一种操作指令的响应方法和计算机设备
CN104657240B (zh) 多内核操作系统的失效控制方法及装置
CN107730380B (zh) 联名账户处理方法、系统及服务器
CN110162415B (zh) 用于处理数据请求的方法、服务器、装置及存储介质
CN111625375A (zh) 帐号预约方法和装置、存储介质及电子设备
CN111752911A (zh) 一种基于Flume的数据传输方法、系统、终端及存储介质
JP4305364B2 (ja) Webサービス要求中継システム、Webサービス要求中継方法、中継サーバ、及びそのプログラム
CN110297822A (zh) 面向区块链的密钥管理方法、装置、设备及存储介质
CN110752939A (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
GR01 Patent grant
GR01 Patent grant