一种消息处理方法、装置及服务器与流程

文档序号:17988894发布日期:2019-06-22 00:37阅读:127来源:国知局
一种消息处理方法、装置及服务器与流程

本发明涉及数据存储领域,特别是涉及一种消息处理方法、装置及服务器。



背景技术:

消息系统是由一个存储消息的系统公用存储空间,消息生产者可以将需要发送的消息发送至消息系统中,消息消费者需要获得这个消息时,再从消息系统中取出这个消息。在实际应用中,若消息系统中积压的消息打满磁盘,就无法接收新的消息,会造成消息生产失败(即消息无法发送到消息系统中),影响消息系统的稳定。



技术实现要素:

本发明实施例的目的在于提供一种消息处理方法、装置及服务器,以实现缓解消息系统的消息堆积情况,保持消息系统的稳定。具体技术方案如下:

第一方面,提供了一种消息处理方法,应用于目标服务器,所述目标服务器可以与消息系统和数据库进行交互,所述方法包括:

接收缓存指令,所述缓存指令中包括目标参数,所述目标参数用于标识积压消息;

根据所述目标参数,从所述消息系统中获取积压消息;

将所述目标参数与所述积压消息对应保存至所述数据库中。

可选的,所述目标参数包括:集群标识和队列标识;根据所述目标参数,从所述消息系统中获取积压消息,包括:

从所述消息系统中,所述集群标识对应的集群中,所述队列标识对应的队列中获取积压消息。

可选的,将所述目标参数与所述积压消息对应保存至所述数据库中,包括:

分别将每个积压消息由消息对象形式转换为字符串形式;

根据所述集群标识和所述队列标识,确定积压消息的缓存标签;

将所述缓存标签、各积压消息标识,积压消息标识对应的字符串形式的积压消息对应保存至所述数据库中。

可选的,在将所述目标参数与所述积压消息对应保存至所述数据库中之后,还包括:

接收还原指令,所述还原指令中包括所述目标参数;

根据所述目标参数,从所述数据库中获取所述积压消息;

将所述积压消息发送至所述消息系统。

可选的,根据所述目标参数,从所述数据库中获取所述积压消息,包括:

根据所述集群标识和所述队列标识,确定积压消息的缓存标签;

根据所述缓存标签,从所述数据库中获取各积压消息标识对应的字符串形式的积压消息;

分别将获取的各积压消息标识对应的积压消息由字符串形式转换为消息对象形式。

第二方面,提供了一种消息处理装置,应用于目标服务器,所述目标服务器可以与消息系统和数据库进行交互,所述装置包括:

接收模块,用于接收缓存指令,所述缓存指令中包括目标参数,所述目标参数用于标识积压消息;

获取模块,用于根据所述接收模块接收的所述目标参数,从所述消息系统中获取积压消息;

保存模块,用于将所述目标参数与所述获取模块获取的所述积压消息对应保存至所述数据库中。

可选的,所述目标参数包括:集群标识和队列标识;所述获取模块,具体用于:

从所述消息系统中,所述集群标识对应的集群中,所述队列标识对应的队列中获取积压消息。

可选的,所述保存模块,具体用于:

分别将每个积压消息由消息对象形式转换为字符串形式;根据所述集群标识和所述队列标识,确定积压消息的缓存标签;将所述缓存标签、各积压消息标识,积压消息标识对应的字符串形式的积压消息对应保存至所述数据库中。

可选的,所述装置还包括:发送模块;

所述接收模块,还用于接收还原指令,所述还原指令中包括所述目标参数;

所述获取模块,还用于根据所述目标参数,从所述数据库中获取所述积压消息;

所述发送模块,用于将所述积压消息发送至所述消息系统。

可选的,所述获取模块,具体用于:

根据所述集群标识和所述队列标识,确定积压消息的缓存标签;根据所述缓存标签,从所述数据库中获取各积压消息标识对应的字符串形式的积压消息;分别将获取的各积压消息标识对应的积压消息由字符串形式转换为消息对象形式。

第三方面,提供了一种服务器,所述服务器包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

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

处理器,用于执行存储器上所存放的程序时,实现上述任一所述的消息处理方法步骤。

第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的消息处理方法步骤。

第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的消息处理方法步骤。

本发明实施例提供的消息处理方法、装置及服务器,可以根据接收到的缓存指令,获取消息系统中的积压消息,然后将缓存指令中的目标参数与积压消息对应保存至数据库中。可见,本发明实施例中可以根据缓存指令,将积压消息转存至数据库中,此时消息系统中有足够的存储空间,可以接收新的消息,所以本发明实施例可以缓解消息系统的消息堆积情况,保持了消息系统的稳定。

当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例提供的一种消息处理系统结构示意图;

图2为本发明实施例提供的一种消息处理方法流程图;

图3为本发明实施例提供的另一种消息处理方法流程图;

图4为本发明实施例提供的一种消息处理装置结构示意图;

图5为本发明实施例提供的一种服务器的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

本发明实施例提供的消息处理方法可以应用于图1所示的消息处理系统中,该系统包括:消息系统、目标服务器和数据库。消息系统、目标服务器与数据库之间的连接均可以为无线连接。

其中,消息系统,包括多个系统服务器,用于接收并存储消息生产者发送的消息。并为接收到的消息添加集群标识和队列标识。消息系统中的各个系统服务器之间的连接均可以为无线连接。

目标服务器包括:缓存与还原模块,用于当需要将消息系统中的积压消息缓存到数据库中时,根据积压消息的集群标识和队列标识确定需要缓存的积压消息,然后将消息系统中需要缓存的积压消息缓存到数据库中;当需要将数据库中的积压消息还原到消息系统中时,根据积压消息的缓存标签,从数据库中将需要还原的积压消息发送到消息系统中。

数据库,可以是分布式存储系统(hbase),用于在保存需要缓存的积压消息时,将积压消息与积压消息对应的缓存标签对应保存。

在另一种实施方式中,数据库可以集成在目标服务器中。

结合图1,本发明实施例提供了一种消息处理方法,应用于目标服务器,目标服务器可以与消息系统和数据库进行信息交互,如图2所示,该方法包括:

步骤201,接收缓存指令。

在本发明实施例中,当消息系统中的一个队列的积压消息过多时,目标服务器可以接收到缓存指令,以使得目标服务器将该队列中的积压消息缓存至数据库中。

或者,当老集群中存在服务器故障,或者当老集群需要改变集群的地理位置,而导致要部署新的集群替换老集群时,目标服务器可以接收到缓存指令,以使得目标服务器将老集群中的积压消息缓存至数据库中。

其中,缓存指令中包括目标参数,目标参数包括:集群标识和队列标识;目标参数用于标识积压消息。集群标识可以是集群身份标识(identification,id),队列标识可以是队列名称。

步骤202,根据目标参数,从消息系统中获取积压消息。

在一种实施方式中,具体地,目标服务器可从消息系统中,集群标识对应的集群中,队列标识对应的队列中获取积压消息。集群标识可以是集群身份标识(identification,id),队列标识可以是队列名称。

例如,目标参数包括的集群标识为1,队列标识为a,则目标服务器从消息系统的集群1包含的队列a中获取积压消息,可以理解为当前队列a中包含的消息均为积压消息。

可选地,目标参数中还可包括时间参数,例如时间参数为2018010105,则集群标识对应的集群中,队列标识对应的队列中在2018年1月1日05:00到2018年1月1日05:59时间段内消息系统收到的消息均为需要获取的积压消息。

步骤203,将目标参数与积压消息对应保存至数据库中。

在一种实施方式中,可以分别将每个积压消息由消息对象形式转换为字符串形式;然后根据集群标识、队列标识,确定积压消息的缓存标签;再将缓存标签、各积压消息标识,积压消息标识对应的字符串形式的积压消息对应保存在数据库中。

在本发明实施例中,可以通过处理工具fastjson将积压消息由消息对象形式转换为js对象简谱(javascriptobjectnotation,json)字符串,或转换为其它易于存储的字符串。然后将集群标识和队列标识拼接,根据拼接结果计算积压消息的缓存标签(md5)。根据md5和各积压消息的id,确定行键(rowkey),即,rowkey=md5+messageid。将rowkey和rowkey对应的json字符串,对应保存在hbase中。

在另一种实施方式中,还可以根据集群标识、队列标识和时间戳,确定积压消息的缓存标签;再将缓存标签、各积压消息标识,积压消息标识对应的字符串形式的积压消息对应保存在数据库中。

其中,时间戳用于标记本次缓存的时间,例如,时间戳可以为接收到缓存指令时的时刻,可以为从消息系统中获取到积压消息时的时刻,还可以是将积压消息保存到数据库时的时刻。

在本发明实施例中,由于hbase中的rowkey是由md5和messageid组成的,多个md5对应一个区域(region),不同的region分配在不同的区域服务(regionserver)中,可以达到均衡负载的目的。而rowkey中的messageid用于区分每一条积压消息,避免冲突。

在本发明实施例中,在将缓存标签、各积压消息标识,积压消息标识对应的字符串形式的积压消息对应保存在数据库中后,可以将集群标识、队列标识和时间戳作为本次缓存标记(tag),将tag和md5对应保存至目标服务器的关系型数据库管理系统(mystructuredquerylanguage,mysql)中。可选的,tag中还可以包括本次缓存操作的原因,例如:tag中标记的本次缓存操作的原因是:clustermigration,表示由于集群迁移,需要缓存老集群中的积压消息。

本发明实施例提供的消息处理方法,可以根据接收到的缓存指令,获取消息系统中的积压消息,然后将缓存指令中的目标参数与积压消息对应保存至数据库中。可见,本发明实施例中可以根据缓存指令,将积压消息转存至数据库中,此时消息系统中有足够的存储空间,可以接收新的消息,所以本发明实施例可以缓解消息系统的消息堆积情况,保持了消息系统的稳定。

在将目标参数与积压消息对应保存至数据库后,还可以将存储在数据库的积压消息还原至消息系统中,结合图3,图3为本发明实施例提供的另一种消息处理方法流程图,应用于目标服务器,包括步骤301至步骤306。

其中,步骤301至步骤303与步骤201至步骤203相同,可参考上述步骤201至步骤203中的相关描述,在此不再赘述。

步骤304,接收还原指令。

在本发明实施例中,当消息系统的一个队列中积压消息减少到预设阈值时,目标服务器可以接收到还原指令,以使得目标服务器将数据库中缓存的该队列的积压消息还原至消息系统中。

或者,当老集群中存在服务器故障,或者当老集群需要改变集群的地理位置,而导致需要部署新集群替换老集群时,可以将老集群中积压消息存储到数据库中。当新集群部署完毕需要还原老集群中的积压消息时,目标服务器可以接收到还原指令,以使得目标服务器将数据库中缓存的老集群中的积压消息还原至新集群中。

其中,还原指令中包括目标参数。目标参数包括:集群标识和队列标识。集群标识可以是集群id,队列标识可以是队列名称。

一种实施方式中,目标服务器可以接收还原指令,还原指令中可以包括目标参数,或者包括tag。tag中包括:集群标识、队列标识、时间戳和本次缓存操作的原因。

步骤305,根据目标参数,从数据库中获取积压消息。

获取积压消息的方法为:根据集群标识和队列标识,确定积压消息的缓存标签;然后根据缓存标签,从数据库中获取各积压消息标识对应的字符串形式的积压消息;再将获取的各积压消息标识对应的积压消息由字符串形式分别转换为消息对象形式。

获取缓存标签的方式可以包括以下三种:

第一种方式,可以根据集群id和队列名称,从mysql中获取由该集群id和该队列名称对应的md5。或者直接由该集群id和该队列名称,计算得到md5。

第二种方式,若数据库中多次存储了同一集群中同一队列的积压消息,那么可以根据集群id和队列名称,从mysql中获取该集群id和队列对应的tag中时间戳距离当前还原时刻最近的tag,获取该tag对应的md5。

第三种方式,还可以根据还原指令中的tag,从mysql中获取该tag对应的md5。

在获取到md5后,再从数据库中获取该md5对应的各积压消息转换的json字符串,再将各json字符串通过fastjson转为消息对象形式。

步骤306,将积压消息发送至消息系统。

可见,本发明实施例,还可以应用于新老集群切换时,缓存老集群中的消息,并在新集群中还原。现有技术在新老集群切换时,只能够完全复制老集群中的全部消息,然后在新集群中还原。而本发明实施例中,可以指定缓存老集群中的部分消息,再在新集群中还原。由于集群中有一些重复的消息,还有一些无用的消息(例如:通知消息),所以,应用本发明实施例还能够节约资源。

对应于上述方法实施例,如图4所示,本发明实施例提供了一种消息处理装置,应用于目标服务器,目标服务器可以与消息系统和数据库进行信息交互,该装置包括:接收模块401、获取模块402和保存模块403。

接收模块401,用于接收缓存指令,缓存指令中包括目标参数,目标参数用于标识积压消息;

获取模块402,用于根据接收模块接收的目标参数,从消息系统中获取积压消息;

保存模块403,用于将目标参数与获取模块获取的积压消息对应保存至数据库中。

可选的,目标参数包括:集群标识和队列标识;获取模块402,可以具体用于:

从消息系统中,集群标识对应的集群中,队列标识对应的队列中获取积压消息。

可选的,保存模块403,可以具体用于:

分别将每个积压消息由消息对象形式转换为字符串形式;根据集群标识和队列标识,确定积压消息的缓存标签;将缓存标签、各积压消息标识,积压消息标识对应的字符串形式的积压消息对应保存至数据库中。

可选的,该装置还包括:发送模块;

接收模块401,还用于接收还原指令,还原指令中包括目标参数;

获取模块402,还用于根据目标参数,从数据库中获取积压消息;

发送模块,用于将积压消息发送至消息系统。

可选的,获取模块402,可以具体用于:

根据集群标识和队列标识,确定积压消息的缓存标签;根据缓存标签,从数据库中获取各积压消息标识对应的字符串形式的积压消息;分别将获取的各积压消息标识对应的积压消息由字符串形式转换为消息对象形式。

本发明实施例提供的消息处理装置,可以根据接收到的缓存指令,获取消息系统中的积压消息,然后将缓存指令中的目标参数与积压消息对应保存至数据库中。可见,本发明实施例中可以根据缓存指令,将积压消息转存至数据库中,此时消息系统中有足够的存储空间,可以接收新的消息,所以本发明实施例可以缓解消息系统的消息堆积情况,保持了消息系统的稳定。

本发明实施例还提供了一种服务器,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,

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

处理器501,用于执行存储器503上所存放的程序时,实现上述方法实施例中由目标服务器执行的步骤。

上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一消息处理方法的步骤。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一消息处理方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

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

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

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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