实现消息队列重连的方法、装置、存储介质及设备与流程

文档序号:17773034发布日期:2019-05-28 19:40阅读:504来源:国知局
实现消息队列重连的方法、装置、存储介质及设备与流程

本发明涉及计算机技术领域,尤其涉及一种实现消息队列重连的方法、装置、存储介质及设备。



背景技术:

目前微服务的发展日益突出,随之兴起的消息队列的应用愈发普及。rabbitmq是一款基于amqp协议的消息中间件,它能够在应用之间提供可靠的消息传输。在易用性,扩展性,高可用性上表现优秀,应用广泛。但是,在主业务服务中如果直接应用rabbitmq消息队列会由于网络不稳定等多方面原因,出现主业务服务与rabbitmq服务连接中断,造成假死的现象,甚至导致服务崩溃。

可见,针对rabbitmq连接中断或假死之后,如何实现消息队列连接的自动恢复具有重要意义。



技术实现要素:

鉴于上述问题,本发明提出了一种实现消息队列重连的方法、装置、存储介质及设备,能够在rabbitmq连接出现中断或假死时实现连接的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

本发明的一个方面,提供了一种实现消息队列重连的方法,所述方法包括:

在rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态;

当监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接。

可选地,所述执行预设的监听协程,以监听所述rabbitmq连接的连接状态,包括:

执行所述监听协程,监测底层通道中是否存在连接失效标识,所述连接失效标识由主业务出现连接失效时写入所述底层通道;

当所述监听协程监测到所述连接失效标识时,判定当前rabbitmq连接处于连接失效状态。

可选地,所述所述方法还包括:

预先创建所述监听协程,所述监听协程用于独立于当前主业务运行。

可选地,所述通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接,包括:

通过所述监听协程调用预设的连接建立程序建立rabbitmq连接;

若连接建立失败,则启动预设定时器,并在到达预设定时周期时重新建立所述rabbitmq连接。

本发明的另一个方面,提供了一种实现消息队列重连的装置,包括:

监听模块,用于在rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态;

连接模块,用于当监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接。

可选地,所述监听模块,具体用于执行所述监听协程,监测底层通道中是否存在连接失效标识,所述连接失效标识由主业务出现连接失效时写入所述底层通道;当所述监听协程监测到所述连接失效标识时,判定当前rabbitmq连接处于连接失效状态。

可选地,所述装置还包括:

配置模块,用于预先创建所述监听协程,所述监听协程用于独立于当前主业务运行。

可选地,所述连接模块,具体用于通过所述监听协程调用预设的连接建立程序建立rabbitmq连接;若连接建立失败,则启动预设定时器,并在到达预设定时周期时重新建立所述rabbitmq连接。

此外,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述方法的步骤。

此外,本发明还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述方法的步骤。

本发明实施例提供的实现消息队列重连的方法、装置、存储介质及设备,使主服务与rabbitmq服务之间维持正常rabbitmq连接,当rabbitmq连接出现中断或假死时实现连接的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例的一种实现消息队列重连的方法的流程示意图;

图2为本发明实施例的一种实现消息队列重连的方法所适用于的系统架构图;

图3为本发明实施例的一种实现消息队列重连的方法中步骤s12的内部流程示意图;

图4为本发明实施例的一种实现消息队列重连的装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。

针对rabbitmq连接中断或假死之后,无法自动恢复连接的问题,本发明提供了一种实现消息队列重连的方法。图1示意性示出了本发明一个实施例的实现消息队列重连的方法的流程图。参照图1,本发明实施例提出的实现消息队列重连的方法具体包括步骤s11~s12,如下所示:

s11、在rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态。

本发明实施例中,预先创建所述监听协程,所述监听协程用于独立于当前主业务运行。

本发明实施例,通过预先创建的监听协程实现对rabbitmq连接的连接状态监听。其中,协程相对线程来说,开销小,使用创建协程的方式更加凸显出微服务开发的精髓。而且,通过创建专用于监听rabbitmq连接失效的协程,从微服务开发的角度来说既方便快捷,也能够减少资源开销。在rabbitmq连接建立成功后,即开启监听协程,该协程独立运行不会影响主业务的执行。

s12、当监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接。

本发明实施例中,在任务初始阶段主业务调用连接建立程序建立业务模块与rabbitmq服务之间的rabbitmq连接,当rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态,当监听模块监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接,实现rabbitmq连接出现中断或假死时的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

本发明实施例提供的实现消息队列重连的方法,主服务与rabbitmq服务之间维持正常rabbitmq连接,当rabbitmq连接出现中断或假死时,在不影响主业务正常运行的前提下,通过监听协程调用连接建立程序,以重新建立rabbitmq连接,实现连接的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

图2为本发明实施例提供的实现消息队列重连的方法所适用于的系统架构图。如图2所示,整体系统可以分为主服务和rabbitmq服务两部分,其中主服务又分为连接模块,监听模块和业务模块。本发明的核心在于连接模块和监听模块。连接模块负责在任务初始阶段调用连接建立程序建立业务模块与rabbitmq服务之间的rabbitmq连接,监听模块是通过协程的方式对已建立起的rabbitmq连接起监听作用。具体的,在rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态。连接模块,还用于当监听模块监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接。

本实施例中的业务模块主要负责业务处理。

在本发明实施例中,所述执行预设的监听协程,以监听所述rabbitmq连接的连接状态,具体包括以下步骤:

执行所述监听协程,监测底层通道中是否存在连接失效标识,所述连接失效标识由主业务出现连接失效时写入所述底层通道;

当所述监听协程监测到所述连接失效标识时,判定当前rabbitmq连接处于连接失效状态。

本发明实施例提供的实现消息队列重连的方法,通过创建监听协程+通道的方法,较为轻易的实现主服务与rabbitmq服务的重连机制,使主服务与rabbitmq服务之间维持正常连接,避免因连接假死导致消息通讯机制不健全,影响业务处理。

本实施例中,所述通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接,包括:

通过所述监听协程调用预设的连接建立程序建立rabbitmq连接;

若连接建立失败,则启动预设定时器,并在到达预设定时周期时重新建立所述rabbitmq连接。

参见图3,重新建立所述rabbitmq连接的实现具体包括:调用预设的连接建立程序建立rabbitmq连接;若连接建立失败,则启动预设定时器,并在到达预设定时周期时重新建立所述rabbitmq连接,若连接建立成功,结束当前连接建立操作。进一步地,需要继续执行所述监听协程,监测底层通道中是否存在连接失效标识,实现rabbitmq连接出现中断或假死时的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

在一个具体实施例中,主服务启动后即开始通过连接模块建立与rabbitmq服务模块的有效连接,如果连接建立不成功就设置定时循环的建立连接过程,直至与rabbimq服务的连接建立成功。在与rabbitmq服务的连接建立成功后,开启监听协程,监听连接失效的标志,连接失效后重新执行连接过程,直至连接建立成功,与此同时应阻塞住主业务避免报错。各流程具体实现细节如下:

连接建立过程:创建连接时,可能因为网络不稳定等因素导致建立连接的过程中出现失败的情况。针对少数情况下连接不会一次性的建立成功的情况,可以通过设置定时器,循环的去建立连接,直至连接建立成功后跳出循环,继续执行后面的业务模块。

连接失效监听:在rabbitmq连接建立成功后,即开启监听协程,该协程独立运行不会影响主业务的执行。在协程中利用通道的阻塞特性,主业务中出现连接失效时,将失效标志写入通道中,协程中通过读取通道中的失效标志达到监听的目的,通过通道的阻塞特性进行连接失效的信号传递,实现连接失效监听。

对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

图4示意性示出了本发明一个实施例的实现消息队列重连的装置的结构示意图。参照图4,本发明实施例的实现消息队列重连的装置具体包括监听模块201以及连接模块202,其中:

监听模块201,用于在rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态;

连接模块202,用于当监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接。

本发明实施例提供的实现消息队列重连的装置,在不影响主业务正常运行的前提下,通过监听协程调用连接建立程序,以重新建立rabbitmq连接,实现连接的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

在本发明实施例中,所述监听模块301,具体用于执行所述监听协程,监测底层通道中是否存在连接失效标识,所述连接失效标识由主业务出现连接失效时写入所述底层通道;当所述监听协程监测到所述连接失效标识时,判定当前rabbitmq连接处于连接失效状态。

在本发明实施例中,所述装置还包括附图中未示出的配置模块;

所述的配置模块,用于预先创建所述监听协程,所述监听协程用于独立于当前主业务运行。

在本发明实施例中,所述连接模块202,具体用于通过所述监听协程调用预设的连接建立程序建立rabbitmq连接;若连接建立失败,则启动预设定时器,并在到达预设定时周期时重新建立所述rabbitmq连接,若连接建立成功,则继续执行所述监听协程,监测底层通道中是否存在连接失效标识,实现rabbitmq连接出现中断或假死时的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

本发明实施例提供的实现消息队列重连的方法、装置、存储介质及设备,使主服务与rabbitmq服务之间维持正常rabbitmq连接,当rabbitmq连接出现中断或假死时实现连接的自动恢复,避免因连接中断或假死导致消息通讯机制不健全,影响业务处理。

此外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述方法的步骤。

本实施例中,所述实现消息队列重连的装置集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

本发明实施例提供的电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述各个实现消息队列重连的方法实施例中的步骤,例如图1所示的步骤s11、在rabbitmq连接建立成功后,执行预设的监听协程,以监听所述rabbitmq连接的连接状态;s12、当监听到所述rabbitmq连接处于连接失效状态时,通过所述监听协程调用预设的连接建立程序,以重新建立所述rabbitmq连接。或者,所述处理器执行所述计算机程序时实现上述各实现消息队列重连的装置实施例中各模块/单元的功能,例如图4所示的监听模块201以及连接模块202。

示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述实现消息队列重连的装置中的执行过程。例如,所述计算机程序可以被分割成监听模块201以及连接模块202。

所述电子设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述电子设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,本实施例中的电子设备可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备还可以包括输入输出设备、网络接入设备、总线等。

所述处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述电子设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1