实现分布式消息队列的方法及系统与流程

文档序号:12008942阅读:305来源:国知局
实现分布式消息队列的方法及系统与流程
本发明涉及移动通信技术应用领域,更具体地,涉及一种实现分布式消息队列的方法及系统。

背景技术:
消息队列是一种消息交互机制,用于线程间、进程间不同的主机节点间消息的发送和接收。分布式消息队列是指基于分布式架构构建的消息队列系统,用于不同的主机节点间的消息交互。分布式消息队列是分布式系统的基础组件,其主要起子系统间解耦合、使系统的结构灵活、网络屏蔽以及削峰填谷等作用,其在移动互联网中应用尤其广泛,包括微博,社区,美食,购物等与人们生活密切相关的一些应用。因为这些应用的用户量巨大,因此对分布式消息队列提出了更高的要求,具体包括消息数量的要求以及可扩展性要求等。例如,分布式消息队列系统能够支持的队列数,以及队列中消息数应当是海量的,没有限制;并且消息的容量和性能不能满足要求时,可通过扩展消息队列服务端节点进行线性的扩展,消息队列的扩展对应用是透明的,对于已部署的应用,应用应该感知不到消息队列的扩展;现有的消息队列系统中,消息队列存放在消息队列服务端的内存中或者消息队列服务端的硬盘中,由于内存或硬盘均有大小限制,所以以上几点都是目前的消息队列系统中难以解决的几个要求,现有的分布式消息队列技术尚不能同时满足以上几点要求。

技术实现要素:
本发明的主要目的在于提供一种实现分布式消息队列的方法,旨在解决现有的分布式系统无法满足扩展性和消息数量要求的缺陷。为了实现发明目的,本发明提供一种实现分布式消息队列的方法,其特征在于,包括以下步骤:消息队列客户端向消息队列服务端发送消息发送请求;消息队列服务端根据所述消息发送请求生成消息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,消息队列客户端向消息队列服务端发送消息发送请求;步骤S20,消息队列服务端根据所述消息发送请求生成消息ID;步骤S30,消息队列客户端将所有的消息按照所述消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端的不同节点中;本发明实施例中,消息队列服务端包括若干节点,例如多个辅节点及用于与消息队列客户端及辅节点进行数据交互的协同器等。本发明实施例中,通过哈希(Hash)算法进行哈希运算后,得到一个哈希值,该值可反映消息是跟消息队列服务端中的哪一个节点对应。步骤S40,消息队列服务端存储所述消息,根据预置的消息订阅规则将消息发送至消息接收端;或者在有消息接收端关注消息时,提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。具体的,可由协同器存储所述消息根据预置的消息订阅规则将消息发送至消息接收端,或者协同器在有消息接收端关注消息时,提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。本发明实施例中,消息队列服务端是由若干分布式的节点组成,无中心化,性能和容量随着节点的个数线性扩充;消息队列客户端和应用子系统部署在一起,应用子系统通过调用消息队列客户端的接口进行消息队列的创建、发送、接收、队列属性的查询以及队列的删除等操作。由于消息队列服务端采用了分布式集群的方案,消息队列客户端将所有的消息按照自生成的消息ID进行Hash的方式存储到不同的服务器节点上,当容量或性能不能够满足要求时,可通过添加新的节点,自动的实现数据迁移的方式,来线性的增加系统的容量和性能。本发明实施例中,上述步骤S10中可进一步包括:将消息的索引存放在消息队列服务端节点的内存中,消息的内容存放在消息队列服务端节点的磁盘上。对于单个节点,消息的索引存放在内存中,消息的内容存放在大容量的磁盘上,写入磁盘的时候,按照一定的顺序写入文件,这样即使单个节点,也可以达到很好的性能和容量。因为这个集群是可以线性扩展的,所以消息队列的个数,以及队列中消息的个数可以做到无限制。在一实施例中,在上述步骤S40中,服务端进行消息的存储,如果有消息接收客户端存在,则提示消息接收端接收消息,消息接收端亦可以主动接收消息队列中的消息。参照图2,本发明实施例中,将消息由消息队列客户端发送至消息队列服务端的具体流程可以为:首先,消息队列客户端发送头指针操作:Send+N;协同器接收到消息队列客户端发送的N个消息发送请求的头指针后,从本地读消息队列所在的摘要/内容对,并发送读(Read)请求至辅节点;辅节点收到Read请求后,从本地Read消息队列并将结果反馈给协同器;协同器接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对;协同器将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性;协同器本地保存摘要/内容对并发送写请求至辅节点,以更新数据;辅节点更新数据后将结果反馈给协同器;协同器收到足够的回应后合并结果并发送给消息队列客户端。消息队列客户端收到Send+N操作成功的回应后,将N个消息转换为N对摘要/内容对过Set请求发送给协同器;协同器处理消息存入请求并回复;如果该消息队列被其它消息接收端关注着,则Send消息成功后会按一定的规则通知关注消息的消息接收端,相应的消息接收端会发起消息的接收流程。应当说明的是,本发明实施例中,消息接收端可以是之前发送消息发送请求的消息队列客户端,也可以是其他与消息队列客户端不相干的客户端。本发明实施例中,消息接收端从消息队列服务端接收消息有多种机制,可以是单步的接收的方式,即由消息接收端的应用系统单独调用接收函数接收消息,如果消息队列中有消息,则返回一条消息,否则返回消息队列中没有消息的信息;也可以有由消息接收端的应用系统主动的订阅某个消息队列,这样在消息队列有消息时,消息接收端就会主动的通知应用系统。本发明实施例中,消息接收端接收消息分为三步,首先是协同器在有消息进入队列后,按照一定的规则通知消息接收端开始接收消息,其次对消息队列的尾指针的变更,为了减少消息的交互,收到通知后,批量获取N条消息,则对尾指针加上N,最后在尾指针操作成功后需要将真正的消息转换为N对摘要/内容对,通过Get操作获取消息。参照图3所示,具体步骤为:消息接收端收到消息队列有消息通知,发送尾指针操作:Send+N;协同器接收到消息接收端发送的N个消息发送请求的尾指针后,先从本地Read消息队列所在摘要/内容对,并发送Read请求至辅节点;辅节点收到Read请求后从本地读消息队列并将结果返回协同器;协同器接收到辅节点返回的足够的消息队列后,从中选取最新的摘要/内容对;协同器将最新的摘要/内容对中的消息属性转换为消息ID,并对其中的头指针+N后将结果转换回新的消息属性;协同器本地保存摘要/内容对,并发送写请求至辅节点,以更新数据;辅节点更新数据后将结果返回协同器;协同器收到足够的回应后合并结果返回消息队列客户端;消息队列客户端收到尾指针Send+N操作成功的回应后,将N个消息转换为N对摘要/内容对通过Get请求发送给协同器;协同器依次获取N条消息。本发明还提供一种实现分布式消息队列的系统,可用于实现上述方法,如图4所示,其包括消息队列服务端10和消息队列客户端20,其中,所述消息队列客户端20包括:发送模块21,用于向消息队列服务端10发送消息发送请求;消息处理模块22,用于将所有的消息按照消息队列服务端10所生成的消息ID进行哈希运算,根据得到的哈希值将消息存储到消息队列服务端10的不同节点中;所述消息队列服务端10包括若干节点,所述节点分为辅节点11及协同器12,所述协同器12用于接收并存储所述消息,根据预置的消息订阅规则将消息发送至消息接收端;或者在有消息接收端关注消息时,提示消息接收端接收消息,并根据消息接收端的请求向消息接收端发送消息。本发明实施例中,协同器12、辅节点11与消息队列客户端20之间的数据交互过程可参照前述图2和图3所示实施例,在此不作赘述。本发明通过将消息队列服务端由不同节点组成,将消息存储到消息队列服务端的不同节点,可以解决传统分布式消息队列系统的容量受内存大小或硬盘大小的限制,不可扩展的弊端,提升了分布式消息队列系统,提高了分布式消息队列系统的性能和大容量,并且具有好的易用性。在一实施例中,消息处理模块22进一步用于将消息的索引存放在消息队列服务端节点的内存中,消息的内容存放在消息队列服务端节点的磁盘中。由于消息存储在磁盘上,这样即使断电消息也不会丢失。同时消息采取多副本的方式存储在集群中,这样,单个节点的宕机异常,对整个消息队列对外提供的服务没有任何影响,保证了消息队列服务的可靠性。结合图4可以看出,本发明实施例中,整个实现分布式消息队列的系统的结构非常简单,应用调用消息队列客户端提供接口调用,就像调用本地的接口函数一样简单,而不需要感知消息队列服务端的存在和具体的消息发送的细节,对于应用来说,只需要知道消息队列的名字,就可以发送和接受消息了,因此具有较好的易用性。本发明不仅可以实现由一个或多个消息队列客户端将消息存储到消息队列服务端,也可以由消息队列服务端的一个或多个节点将消息发送给一个或多个消息接收端,实现了单对单、单对多以及多对多的消息处理模式。解决了传统分布式消息队列系统的容量受内存大小或硬盘大小的限制,不可扩展的弊端,提升了分布式消息队列系统性能和容量。以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1