实现分布式消息队列的方法及系统技术方案

技术编号:9297582 阅读:259 留言:0更新日期:2013-10-31 01:29
本发明专利技术公开一种实现分布式消息队列的方法,包括以下步骤:消息队列客户端向消息队列服务端发送消息发送请求;消息队列服务端根据消息发送请求生成消息ID;消息队列客户端将所有的消息按照消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端的不同节点中;消息队列服务端接收并存储消息,根据预置的消息订阅规则将消息发送至消息接收端;或者判断是否有消息接收端关注消息,如果有,则提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。本发明专利技术还提供上述方法对应的系统。本发明专利技术能提升分布式消息队列系统性能和容量,并且具有好的易用性。

【技术实现步骤摘要】
实现分布式消息队列的方法及系统
本专利技术涉及移动通信技术应用领域,更具体地,涉及一种实现分布式消息队列的方法及系统。
技术介绍
消息队列是一种消息交互机制,用于线程间、进程间不同的主机节点间消息的发送和接收。分布式消息队列是指基于分布式架构构建的消息队列系统,用于不同的主机节点间的消息交互。分布式消息队列是分布式系统的基础组件,其主要起子系统间解耦合、使系统的结构灵活、网络屏蔽以及削峰填谷等作用,其在移动互联网中应用尤其广泛,包括微博,社区,美食,购物等与人们生活密切相关的一些应用。因为这些应用的用户量巨大,因此对分布式消息队列提出了更高的要求,具体包括消息数量的要求以及可扩展性要求等。例如,分布式消息队列系统能够支持的队列数,以及队列中消息数应当是海量的,没有限制;并且消息的容量和性能不能满足要求时,可通过扩展消息队列服务端节点进行线性的扩展,消息队列的扩展对应用是透明的,对于已部署的应用,应用应该感知不到消息队列的扩展;现有的消息队列系统中,消息队列存放在消息队列服务端的内存中或者消息队列服务端的硬盘中,由于内存或硬盘均有大小限制,所以以上几点都是目前的消息队列系统中难以解决的几个要求,现有的分布式消息队列技术尚不能同时满足以上几点要求。
技术实现思路
本专利技术的主要目的在于提供一种实现分布式消息队列的方法,旨在解决现有的分布式系统无法满足扩展性和消息数量要求的缺陷。为了实现专利技术目的,本专利技术提供一种实现分布式消息队列的方法,其特征在于,包括以下步骤:消息队列客户端向消息队列服务端发送消息发送请求;消息队列服务端根据所述消息发送请求生成消息ID;消息队列客户端将所有的消息按照所述消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端的不同节点中;消息队列服务端存储所述消息,根据预置的消息订阅规则将消息发送至消息接收端;或者在有消息接收端关注消息时,提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。优选地,所述根据得到的哈希值将消息存储到消息队列服务端的不同节点中进一步包括:将消息的索引存放在消息队列服务端节点的内存中,消息的内容存放在消息队列服务端节点的磁盘中。优选地,所述节点包括辅节点及协同器,所述协同器用于与消息队列客户端及辅节点进行数据交互;所述消息队列服务端根据消息发送请求生成消息ID包括:协同器接收到消息队列客户端发送的N个消息发送请求的头指针后,从本地读消息队列所在的摘要/内容对,并发送读请求至辅节点;辅节点收到所述读请求后,从本地读消息队列并将结果反馈给协同器;协同器接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对;协同器将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性;协同器本地保存摘要/内容对并发送写请求至辅节点,以更新数据;辅节点更新数据后将结果反馈给协同器;协同器收到足够的回应后合并结果并发送给消息队列客户端。优选地,所述根据消息接收端的请求向消息接收端发送消息包括:协同器接收到消息队列客户端发送的N个消息发送请求的尾指针后,先从本地读消息队列所在摘要/内容对,并发送读请求至辅节点;辅节点收到读请求后从本地读消息队列并将结果返回协同器;协同器接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对;协同器将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性;协同器本地保存摘要/内容对,并发送写请求至辅节点,以更新数据;辅节点更新数据后将结果返回协同器;协同器收到足够的回应后合并结果返回消息队列客户端;消息接收端根据接收到的消息ID,请求从消息队列服务端接收消息。优选地,在所述提示消息接收端接收消息之后还包括:消息接收端根据接收到的消息ID,请求从消息队列服务端接收消息。本专利技术提供一种实现分布式消息队列的系统,其包括消息队列服务端和消息队列客户端,其中,所述消息队列客户端包括:发送模块,用于向消息队列服务端发送消息发送请求;消息处理模块,用于将所有的消息按照消息队列服务端所生成的消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端的不同节点中;所述节点包括辅节点及协同器,所述协同器用于与消息队列客户端及辅节点进行数据交互;所述消息队列服务端接收并存储所述消息,根据预置的消息订阅规则将消息发送至消息接收端;或者在有消息接收端关注消息时,提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。优选地,所述消息处理模块进一步用于将消息的索引存放在消息队列服务端节点的内存中,消息的内容存放在消息队列服务端节点的磁盘中。优选地,,所述消息队列服务端包括辅节点及协同器,所述协同器具体用于接收到消息队列客户端发送的N个消息发送请求的头指针后,从本地读消息队列所在的摘要/内容对,并发送读请求至辅节点;所述辅节点具体用于收到所述读请求后,从本地读消息队列并将结果反馈给协同器;所述协同器还用于接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对,并将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性,保存摘要/内容对并发送写请求至辅节点,以更新数据;所述辅节点还用于更新数据后将结果反馈给协同器;所述协同器还用于收到足够的回应后合并结果并发送给消息队列客户端。优选地,所述协同器还用于接收到消息队列客户端发送的N个消息发送请求的尾指针后,先从本地读消息队列所在摘要/内容对,并发送读请求至辅节点;所述辅节点还用于收到读请求后从本地读消息队列并将结果返回协同器;所述协同器还用于接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对,将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性,保存摘要/内容对,并发送写请求至辅节点,以更新数据;所述辅节点还用于更新数据后将结果返回协同器;所述协同器还用于收到足够的回应后合并结果返回消息队列客户端。优选地,所述消息接收端为消息队列客户端,具体用于根据接收到的消息ID,请求从消息队列服务端接收消息。本专利技术通过将消息队列服务端由不同节点组成,将消息存储到消息队列服务端的不同节点,可以实现由一个或多个消息队列客户端将消息存储到消息队列服务端,也可以由消息队列服务端的一个或多个节点将消息发送给一个或多个消息接收端,实现了单对单、单对多以及多对多的消息处理模式,解决了传统分布式消息队列系统的容量受内存大小或硬盘大小的限制,不可扩展的弊端,提升了分布式消息队列系统性能和容量,并且具有好的易用性。附图说明图1为本专利技术实现分布式消息队列的方法一实施例的流程图;图2为本专利技术实现分布式消息队列的方法一实施例中发送消息的时序图;图3为本专利技术实现分布式消息队列的方法一实施例中接收消息的时序图;图4为本专利技术实现分布式消息队列的系统一实施例中的结构示意图。本专利技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。参照图1,本专利技术提供一种应用上述实现分布式消息队列的系统发送短消息的方法,该方法包括以下步骤:步骤S10,消息队列客户端向消息队列本文档来自技高网...
实现分布式消息队列的方法及系统

【技术保护点】
一种实现分布式消息队列的方法,其特征在于,包括以下步骤:消息队列客户端向消息队列服务端发送消息发送请求;消息队列服务端根据所述消息发送请求生成消息ID;消息队列客户端将所有的消息按照所述消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端的不同节点中;消息队列服务端接收并存储所述消息,根据预置的消息订阅规则将消息发送至消息接收端;或者判断是否有消息接收端关注消息,如果有,则提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。

【技术特征摘要】
1.一种实现分布式消息队列的方法,其特征在于,包括以下步骤:消息队列客户端向消息队列服务端发送消息发送请求;消息队列服务端根据所述消息发送请求生成消息ID;消息队列客户端将所有的消息按照所述消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端的不同节点中;消息队列服务端接收并存储所述消息,根据预置的消息订阅规则将消息发送至消息接收端;或者判断是否有消息接收端关注消息,如果有,则提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息;其中,所述节点包括辅节点及协同器,所述协同器用于与消息队列客户端及辅节点进行数据交互;所述消息队列服务端根据消息发送请求生成消息ID包括:协同器接收到消息队列客户端发送的N个消息发送请求的头指针后,从本地读消息队列所在的摘要/内容对,并发送读请求至辅节点;辅节点收到所述读请求后,从本地读消息队列并将结果反馈给协同器;协同器接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对;协同器将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性;协同器本地保存摘要/内容对并发送写请求至辅节点,以更新数据;辅节点更新数据后将结果反馈给协同器;协同器收到足够的回应后合并结果并发送给消息队列客户端。2.如权利要求1所述的方法,其特征在于,所述根据得到的哈希值将消息存储到消息队列服务端的不同节点中进一步包括:将消息的索引存放在消息队列服务端节点的内存中,消息的内容存放在消息队列服务端节点的磁盘中。3.如权利要求1所述的方法,其特征在于,所述根据消息接收端的请求向消息接收端发送消息包括:协同器接收到消息队列客户端发送的N个消息发送请求的尾指针后,先从本地读消息队列所在摘要/内容对,并发送读请求至辅节点;辅节点收到读请求后从本地读消息队列并将结果返回协同器;协同器接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对;协同器将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性;协同器本地保存摘要/内容对,并发送写请求至辅节点,以更新数据;辅节点更新数据后将结果返回协同器;协同器收到足够的回应后合并结果返回消息队列客户端。4.如权利要求1所述的方法,其特征在于,在所述提示消息接收端接收消息之后还包括:消息接收...

【专利技术属性】
技术研发人员:韩银俊高洪丁岩
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1