一种保持RabbitMQ服务的方法、系统及相关装置与流程

文档序号:16149684发布日期:2018-12-05 17:18阅读:268来源:国知局
一种保持RabbitMQ服务的方法、系统及相关装置与流程

本申请涉及rabbitmq服务技术领域,特别涉及一种保持rabbitmq服务的方法、系统、装置及计算机可读存储介质。

背景技术

目前的rabbitmq客户端是面向单个rabbitmq服务器设计的,随着服务提供范围的扩大,现在已经可以部署rabbitmq服务器集群来提高rabbitmq服务的可用性,rabbitmq客户端连接到集群中任意一台服务器都可以发送和接收消息。其中,rabbitmq是一个在amqp协议的基础上完成的、可复用的企业消息系统,其中,mq(messagequeue,消息队列)是一种应用程序对应用程序的通信方法。

但由于每个rabbitmq客户端都是面向单个rabbitmq服务器设计,即在初期都会为每台rabbitmq客户端分配固定连接的一个rabbitmq服务器(沿用了原先仅有一个单个rabbitmq服务器时的方式),因此如果集群中的一台服务器宕机时,连接到这台服务器的所有rabbitmq客户端都会断开连接,而原先与这台宕机了的rabbitmq服务器建立连接的所有rabbitmq客户端由于未考虑在升级至有多个rabbitmq服务器构成的rabbitmq服务器集群时的替换情况,导致这些断开连接的rabbitmq客户端将不能继续向rabbitmq服务器集群发送和接收消息,这样就导致集群的高可用特性并不能充分发挥。

即虽然rabbitmq服务器集群提供了高可用的服务,但是每台rabbitmq客户端还是仅与其中的一个rabbitmq服务器建立固定的连接,一旦出现单节点故障还是出现与原先一样的rabbitmq服务中断的情况。

因此,如何克服现有保持rabbitmq服务机制存在的各项技术缺陷,提供一种在原rabbitmq服务器间的连接中断时能够自动与其它可用rabbitmq服务器重新建立连接以保持rabbitmq服务不中断的机制是本领域技术人员亟待解决的问题。



技术实现要素:

本申请的目的是提供一种保持rabbitmq服务的方法,预先获取集群中所有处于可用状态的rabbitmq服务提供节点,并建立得到包括各可用rabbitmq服务提供节点的可用节点集,在与原rabbitmq服务提供节点间的连接中断时,从该可用节点集中任选一个作为替换节点,并通过建立与该替换节点间的连接保持rabbitmq服务不中断,可显著提升rabbitmq服务的提供质量和集群的高可用性。

本申请的另一目的在于提供了一种保持rabbitmq服务的系统、装置及计算机可读存储介质。

为实现上述目的,本申请提供一种保持rabbitmq服务的方法,包括:

接收从已建立连接的原rabbitmq服务提供节点返回的信息;

判断距上一次接收到所述信息的时长是否超过预设时长;

若是,则从可用节点集中选择任一非所述原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点,并与所述替换节点建立连接以保持rabbitmq服务;其中,所述可用节点集中包括集群中所有可用rabbitmq服务提供节点的节点身份信息和连接建立信息,且所述可用节点集预先存储于rabbitmq客户端本地。

可选的,所述可用节点集的生成过程包括:

获取所述集群内各rabbitmq服务提供节点各自的可用状态信息;

根据各所述可用状态信息确定属于所述可用rabbitmq服务提供节点的rabbitmq服务提供节点;

根据各所述可用rabbitmq服务提供节点的节点身份信息和连接建立信息生成所述可用节点集。

可选的,在从可用节点集中选择任一非所述原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点之前,还包括:

为所述原rabbitmq服务提供节点附加连接中断标记;

对应的,从可用节点集中选择任一非所述原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点具体为:

从所述可用节点集选择任一未附加有所述连接中断标记的可用rabbitmq服务提供节点作为替换节点。

可选的,在根据各所述可用rabbitmq服务提供节点的节点身份信息和连接建立信息生成所述可用节点集之后,还包括:

按预设排序规则将所述可用节点集中包含的各可用rabbitmq服务提供节点进行排序,得到节点排序表。

可选的,从可用节点集中选择任一可用rabbitmq服务提供节点作为备用节点,包括:

按自上而下的顺序选取位于所述节点排序表中最顶端的可用rabbitmq服务提供节点作为所述备用节点。

可选的,该方法还包括:

按预设周期获取每个所述预设周期内所述集群中所述可用rabbitmq服务提供节点的变化信息;

利用所述变换信息更新所述可用节点集。

为实现上述目的,本申请还提供了一种保持rabbitmq服务的系统,包括:

信息接收单元,用于接收从已建立连接的原rabbitmq服务提供节点返回的信息;

连接中断判断单元,用于判断距上一次接收到所述信息的时长是否超过预设时长;

替换节点选取及服务保持单元,用于当所述时长超过所述预设时长时,从可用节点集中选择任一非所述原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点,并与所述替换节点建立连接以保持rabbitmq服务;其中,所述可用节点集中包括集群中所有可用rabbitmq服务提供节点的节点身份信息和连接建立信息,且所述可用节点集预先存储于rabbitmq客户端本地。

可选的,该系统还包括:

可用状态信息获取单元,用于获取所述集群内各rabbitmq服务提供节点各自的可用状态信息;

可用rabbitmq服务提供节点确定单元,用于根据各所述可用状态信息确定属于所述可用rabbitmq服务提供节点的rabbitmq服务提供节点;

可用节点集生成单元,用于根据各所述可用rabbitmq服务提供节点的节点身份信息和连接建立信息生成所述可用节点集。

可选的,该系统还包括:

连接中断标记附加单元,用于为所述原rabbitmq服务提供节点附加连接中断标记;

对应的,所述替换节点选取及服务保持单元具体为:

从所述可用节点集选择任一未附加有所述连接中断标记的可用rabbitmq服务提供节点作为替换节点。

可选的,该系统还包括:

节点排序表生成单元,用于按预设排序规则将所述可用节点集中包含的各可用rabbitmq服务提供节点进行排序,得到节点排序表。

可选的,所述替换节点选取及服务保持单元包括:

顺序选取子单元,用于按自上而下的顺序选取位于所述节点排序表中最顶端的可用rabbitmq服务提供节点作为所述备用节点。

可选的,该系统还包括:

周期性变化信息获取单元,用于按预设周期获取每个所述预设周期内所述集群中所述可用rabbitmq服务提供节点的变化信息;

变化信息周期更新单元,用于利用所述变换信息更新所述可用节点集。

为实现上述目的,本申请还提供了一种保持rabbitmq服务的装置,该装置包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述内容所描述的保持rabbitmq服务的方法的步骤。

为实现上述目的,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述内容所描述的保持rabbitmq服务的方法的步骤。

本申请所提供的一种保持rabbitmq服务的方法:接收从已建立连接的原rabbitmq服务提供节点返回的信息;判断距上一次接收到信息的时长是否超过预设时长;若是,则从可用节点集中选择任一非原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点,并与替换节点建立连接以保持rabbitmq服务。

显然,该方法通过预先获取集群中所有处于可用状态的rabbitmq服务提供节点,并建立得到包括各可用rabbitmq服务提供节点的可用节点集,在与原rabbitmq服务提供节点间的连接中断时,从该可用节点集中任选一个作为替换节点,并通过建立与该替换节点间的连接保持rabbitmq服务不中断,可显著提升rabbitmq服务的提供质量和集群的高可用性。本申请同时还提供了一种保持rabbitmq服务的系统、装置及计算机可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例提供的一种保持rabbitmq服务的方法的流程图;

图2为本申请实施例提供的另一种保持rabbitmq服务的方法的流程图;

图3为本申请实施例提供的一种选取首个可用rabbitmq服务提供节点的示意图;

图4为本申请实施例提供的一种在与原可用rabbitmq服务提供节点间的连接断开时自动进行与其它可用rabbitmq服务提供节点建立连接的示意图;

图5为本申请实施例提供的一种保持rabbitmq服务的系统的机构框图。

具体实施方式

本申请的核心是提供一种保持rabbitmq服务的方法,该方法通过预先获取集群中所有处于可用状态的rabbitmq服务提供节点,并建立得到包括各可用rabbitmq服务提供节点的可用节点集,在与原rabbitmq服务提供节点间的连接中断时,从该可用节点集中任选一个作为替换节点,并通过建立与该替换节点间的连接保持rabbitmq服务不中断,可显著提升rabbitmq服务的提供质量和集群的高可用性。本申请的另一核心是提供一种保持rabbitmq服务的系统、装置及计算机可读存储介质,具有上述有益效果。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

实施例一

以下结合图1,图1为本申请实施例提供的一种保持rabbitmq服务的方法的流程图,其具体包括以下步骤:

s101:接收从已建立连接的原rabbitmq服务提供节点返回的信息;

s102:判断距上一次接收到信息的时长是否超过预设时长;

s101、s102旨在通过rabbitmq客户端从先前已建立连接的原rabbitmq服务提供节点处接收到返回信息的时长判断是否已与该原rabbitmq服务提供节点断开连接,因为即使没有数据传输,也通常会有一个用于保活的心跳包来排除误判。也可能直接由底层事件触发,例如通过套接字协议(socket)返回回的连接断开事件等,本领域技术人员可以通过多种现有方式得以判断连接是否终端,且此部分不是本案所研究的重点,在此不再赘述。

s103:从可用节点集中选择任一非原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点,并与替换节点建立连接以保持rabbitmq服务。

其中,可用节点集中包括集群中所有可用rabbitmq服务提供节点的节点身份信息和连接建立信息,且可用节点集预先存储于rabbitmq客户端本地。

本申请针对在现有集中式rabbitmq服务器集群沿用原先为每台rabbitmq客户端设置固定的rabbitmq服务器的设计时,若该rabbitmq服务器一旦因异常导致断线就会导致与该rabbitmq服务器连接的rabbitmq客户端无法维持正常的rabbitmq服务的缺陷,旨在通过预先将保存有所有处于可用状态的rabbitmq服务提供节点的节点信息提供给各rabbitmq客户端,以使各rabbitmq客户端在与原rabbitmq服务提供节点间的连接断开时可以任选一个可用rabbitmq服务提供节点作为替换节点,并通过与该替换节点建立连接以保持rabbitmq服务不长时中断。

若rabbitmq客户端与该替换节点间的连接再次中断,则可按照相同的选取方式选择另一可用rabbitmq服务提供节点作为新的替换节点,以此类推,直至集群中所有rabbitmq服务提供节点均不可用,为保证不错误选择的已经处于掉线状态的rabbitmq服务提供节点,还可以在于其间的连接中断时为其附加掉线标志,以区别同样位于该可用节点集中的其它可用rabbitmq服务提供节点,当然,也可以直接将其从该可用节点集中剔除,考虑到有些rabbitmq服务提供节点的掉线有可能是暂时的,还可以在采用队列排列各可用rabbitmq服务提供节点时,将其移动至队列尾,在经过多次试图连接均失败后再将其移出该可用节点集。

具体的,如何从记录有集群中所有处于可用状态的rabbitmq服务提供节点的可用节点集中每次选择一个rabbitmq服务提供节点,方式多种多样,可以在没有其它影响因素存在的情况下随机的从中选取一个rabbitmq服务提供节点,还可以按照一定的顺序将各可用rabbitmq服务提供节点进行排序,并遵循一定的选取原则从经过排序得到的排序表中依次选出各可用rabbitmq服务提供节点。

进一步的,如何得到和生成该可用节点集的方式多种多样,主要需要采集集群内各rabbitmq服务提供节点的可用状态信息,其它的信息或表现方式可根据实际情况的需要灵活添加和选择。

更进一步的,组成集群的各rabbitmq服务提供节点的可用状态信息将会随时间发生未知的变换,因此还可以定期更新可用节点集以增大建立成功率,其中一种包括但不限于的实现方式为:

按预设周期获取每个预设周期内集群中可用rabbitmq服务提供节点的变化信息;利用变换信息更新可用节点集。

基于上述技术方案,本申请实施例提供的一种保持rabbitmq服务的方法,该方法通过预先获取集群中所有处于可用状态的rabbitmq服务提供节点,并建立得到包括各可用rabbitmq服务提供节点的可用节点集,在与原rabbitmq服务提供节点间的连接中断时,从该可用节点集中任选一个作为替换节点,并通过建立与该替换节点间的连接保持rabbitmq服务不中断,可显著提升rabbitmq服务的提供质量和集群的高可用性。

实施例二

以下结合图2,图2为本申请实施例提供的另一种保持rabbitmq服务的方法的流程图,本实施例在实施例一的基础上,给出了一种如何生成可用节点集的方法以及一种标记已经处于中断连接状态的rabbitmq服务提供节点以区别其它可用rabbitmq服务提供节点的方法,具体实施步骤如下:

s201:获取集群内各rabbitmq服务提供节点各自的可用状态信息;

s202:根据各可用状态信息确定属于可用rabbitmq服务提供节点的rabbitmq服务提供节点;

s203:根据各可用rabbitmq服务提供节点的节点身份信息和连接建立信息生成可用节点集;

s201、s202以及s203给出了一种生成可用节点集的方法,即获取可用状态信息并根据该可用状态信息确定可用rabbitmq服务提供节点,并建立包含各rabbitmq服务提供节点的节点身份信息和连接建立信息的可用节点集。

其中,节点身份信息为标识不同rabbitmq服务提供节点的信息,连接建立信息及为rabbitmq客户端要连接至一个rabbitmq服务提供节点保持rabbitmq服务所需的信息(例如ip地址、mac地址等)。

s204:当与原rabbitmq服务提供节点间的连接中断之后,为原rabbitmq服务提供节点附加连接中断标记;

本步骤的前提建立在经实施例一s102判断后得到时长超过预设时长的基础上,即根据s102中的描述,可将原先与一个rabbitmq客户端成功建立连接关系并提供rabbitmq服务的原rabbitmq服务提供节点判定为掉线或失联,即与原rabbitmq服务提供节点间的连接中断。

s205:从可用节点集选择任一未附加有连接中断标记的可用rabbitmq服务提供节点作为替换节点;

s204提供了一种为处于连接终端状态的rabbitmq服务提供节点附加连接终端标记的方法,s205则可基于此排除错选rabbitmq服务提供节点的可能性。

s206:与替换节点建立连接以保持rabbitmq服务。

在本申请的另一实施例中,还可以在根据各可用rabbitmq服务提供节点的节点身份信息和连接建立信息生成可用节点集之后:

按预设排序规则将可用节点集中包含的各可用rabbitmq服务提供节点进行排序,得到节点排序表;

对应的,在选取备用节点的步骤中:

按自上而下的顺序选取位于节点排序表中最顶端的可用rabbitmq服务提供节点作为备用节点。

当然还可以遵循其它顺序在节点排序表中选取得到该备用节点,本领域技术人员在此思想的指导下,可得到多种具体实现方式,在此不再赘述。

实施例三

请参见图3和图4,图3为本申请实施例提供的一种选取首个可用rabbitmq服务提供节点的示意图;图4为本申请实施例提供的一种在与原可用rabbitmq服务提供节点间的连接断开时自动进行与其它可用rabbitmq服务提供节点建立连接的示意图,本实施例结合具体应用场景给出了一种具体实现方案:

每个rabbitmq客户端记录了集群中所有可用的rabbitmq服务提供节点的ip地址,并形成一个ip地址池。每当rabbitmq客户端要与rabbitmq集群建立连接使用rabbitmq服务时,就随机的从ip地址池中选择一个ip地址进行连接,当由于网络原因或服务器宕机导致与该ip地址对应的rabbitmq服务提供节点断开连接时,该rabbitmq客户端会自动从ip地址池中随机选择另一个可用的rabbitmq服务器的ip地址进行连接,这一连接恢复的过程对使用者是透明的。通过这一连接保持机制机制,可向使用者(上层业务)提供一个可靠的rabbitmq连接。

具体实施过程如下:

rabbitmq客户端初始化并连接rabbitmq服务器集群,请参见图3:

(1)获取服务器ip地址列表(或者由用户/上层业务传入);

(2)将ip地址顺序打乱(有利于多个服务器节点间的负载均衡);

(3)将乱序的服务器ip地址列表作为ip地址池;

(4)从ip池中依次取ip进行连接,直到连接成功为止;

(5)记录连接成功的ip序号。

检测到连接断开后,rabbitmq客户端重连主要包括以下步骤,请参见图4:

(1)根据序号选择下一个ip(若没有下一个ip则重新从第一个序号开始);

(2)向该ip发起连接,如果失败转到第(1)步。

本实施例将rabbitmq服务器集群的所有可用rabbitmq服务提供节点的ip保存到每个rabbitmq客户端的ip地址池中,每当一个rabbitmq客户端检测到与当前rabbitmq服务提供节点间的连接断开后,就从ip地址池中选择一个备用rabbitmq服务提供节点重新连接,以此保证rabbitmq客户端连接的可用性和业务的连续性。

因为情况复杂,无法一一列举进行阐述,本领域技术人员应能意识到根据本申请提供的基本方法原理结合实际情况可以存在很多的例子,在不付出足够的创造性劳动下,应均在本申请的保护范围内。

下面请参见图5,图5为本申请实施例提供的一种保持rabbitmq服务的系统的结构框图,该系统可以包括:

信息接收单元100,用于接收从已建立连接的原rabbitmq服务提供节点返回的信息;

连接中断判断单元200,用于判断距上一次接收到信息的时长是否超过预设时长;

替换节点选取及服务保持单元300,用于当时长超过预设时长时,从可用节点集中选择任一非原rabbitmq服务提供节点的可用rabbitmq服务提供节点作为替换节点,并与替换节点建立连接以保持rabbitmq服务;其中,可用节点集中包括集群中所有可用rabbitmq服务提供节点的节点身份信息和连接建立信息,且可用节点集预先存储于rabbitmq客户端本地。

进一步的,该保持rabbitmq服务的系统还可以包括:

可用状态信息获取单元,用于获取集群内各rabbitmq服务提供节点各自的可用状态信息;

可用rabbitmq服务提供节点确定单元,用于根据各可用状态信息确定属于可用rabbitmq服务提供节点的rabbitmq服务提供节点;

可用节点集生成单元,用于根据各可用rabbitmq服务提供节点的节点身份信息和连接建立信息生成可用节点集。

进一步的,该保持rabbitmq服务的系统还可以包括:

连接中断标记附加单元,用于为原rabbitmq服务提供节点附加连接中断标记;

对应的,替换节点选取及服务保持单元具体为:

从可用节点集选择任一未附加有连接中断标记的可用rabbitmq服务提供节点作为替换节点。

更进一步的,该保持rabbitmq服务的系统还可以包括:

节点排序表生成单元,用于按预设排序规则将可用节点集中包含的各可用rabbitmq服务提供节点进行排序,得到节点排序表。

其中,替换节点选取及服务保持单元100可以包括:

顺序选取子单元,用于按自上而下的顺序选取位于节点排序表中最顶端的可用rabbitmq服务提供节点作为备用节点。

进一步的,该保持rabbitmq服务的系统还可以包括:

周期性变化信息获取单元,用于按预设周期获取每个预设周期内集群中可用rabbitmq服务提供节点的变化信息;

变化信息周期更新单元,用于利用变换信息更新可用节点集。

基于上述实施例,本申请还提供了一种保持rabbitmq服务的装置,该装置可以包括存储器和处理器,其中,该存储器中存有计算机程序,该处理器调用该存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然,该装置还可以包括各种必要的网络接口、电源以及其它零部件等。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行终端或处理器执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

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