一种实现消息队列的方法及装置制造方法及图纸

技术编号:9990906 阅读:110 留言:0更新日期:2014-05-02 04:08
本发明专利技术公开一种实现消息队列的方法及装置,属于计算机技术领域。所述装置包括:写队列接口,适于接收消息生产者的写消息请求,所述写消息请求中包括待写入消息和所述待写入消息所属消息队列的第一标识;读队列接口,适于接收消息消费者的读消息请求,所述读消息请求中包括待读取消息所属消息队列的第二标识;消息处理器,适于根据消息队列标识与分布式存储系统中存储表的对应关系,将待写入消息存储到与所述第一标识对应的存储表中,以及,从与所述第二标识对应的存储表中顺序读取一条消息,将读取到的消息通过所述读队列接口发送到消息消费者。根据本发明专利技术,使得消息队列能够支持较大消息的存储和传递,并提升了消息队列的可扩展性。

【技术实现步骤摘要】
【专利摘要】本专利技术公开一种实现消息队列的方法及装置,属于计算机
。所述装置包括:写队列接口,适于接收消息生产者的写消息请求,所述写消息请求中包括待写入消息和所述待写入消息所属消息队列的第一标识;读队列接口,适于接收消息消费者的读消息请求,所述读消息请求中包括待读取消息所属消息队列的第二标识;消息处理器,适于根据消息队列标识与分布式存储系统中存储表的对应关系,将待写入消息存储到与所述第一标识对应的存储表中,以及,从与所述第二标识对应的存储表中顺序读取一条消息,将读取到的消息通过所述读队列接口发送到消息消费者。根据本专利技术,使得消息队列能够支持较大消息的存储和传递,并提升了消息队列的可扩展性。【专利说明】一种实现消息队列的方法及装置
本专利技术涉及计算机
,具体涉及一种实现消息队列的方法及装置。
技术介绍
消息(Message)是在两台计算机间传送的数据,消息可以非常简单,只包含少量文本字符串,也可以更复杂,包含较大的对象数据。消息队列机制为应用程序开发人员提供了一种应用程序间快速可靠的通信方式,即通过消息的传递来实现信息的交互。如图1所示,消息队列机制的组件分为三种,即消息的生产者(Producer)、消息的消费者(Consumer)以及消息的中继机构-消息队列(Message Queue, MQ)。消息队列是在消息的传输过程中保存消息的容器,生产者创建消息,将消息发送到消息队列暂存,消费者从消息队列中读取消息并执行。由于消息队列机制的广泛应用,目前在该领域存在多种开源或闭源的消息队列实现方案,如ActiveMQ和Kafka等。ActiveMQ是Apache社区的开源消息队列实现,支持多种语言和协议编写客户端,如Java、C、Perl、Python和PHP等。ActiveMQ是典型的一主多从的结构,即生产者发送消息时会首先在主节点上存储一份,同时同步到多个从节点上存储,靠冗余机制保证消息不丢失。在该方案中,消息会一直存储在MQ中,并维护着每一条消息的状态,直到消费者消费完成后通知MQ,由MQ决定是否要将消息删除。ActiveMQ的缺点在于:由于消费者在消费操作完成后,需要和MQ多次交互确认才能成功删除消息,同时由于MQ消息的存储性能不高,导致读写性能较差,消费效率较低,往往导致队列堆积严重;而如果消息较大,堆积严重,则主节点磁盘存储空间就成为严重的瓶颈;因而ActiveMQ无法支持较大消息的传递。Kafka是一种轻量级的消息队列模式,和ActiveMQ不同,其消息的状态是由消费者维护的,即MQ只负责消息的存储,不负责消息的状态维护。而消息是否是被消费过,只有消费者自己知晓,这样就极大地简化了消息队列MQ的设计复杂度。当然由于MQ中的消息不能任意删除,因此对消息队列磁盘存储空间的要求就更高了。Kafka相对于ActiveMQ而言,取消了 MQ对消息状态的维护功能,即MQ中的所有消息只写入不删除,消费者在消费完成后无需和MQ交互确认。虽然降低了交互开销,但由于消息不会被确认删除,消息队列的存储空间仍然是其瓶颈,因而Kafka亦不能支持较大消息的传递。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的实现消息队列的方法和装置。根据本专利技术的一个方面,提供了一种实现消息队列的装置,包括:写队列接口,适于接收消息生产者的写消息请求,所述写消息请求中包括待写入消息和所述待写入消息所属消息队列的第一标识;读队列接口,适于接收消息消费者的读消息请求,所述读消息请求中包括待读取消息所属消息队列的第二标识;消息处理器,适于根据消息队列标识与分布式存储系统中存储表的对应关系,将待写入消息存储到与所述第一标识对应的存储表中,以及,从与所述第二标识对应的存储表中顺序读取一条消息,将读取到的消息通过所述读队列接口发送到所述消息消费者。可选地,所述装置还包括:对应关系建立器,适于建立消息队列标识与分布式存储系统中存储表的对应关系。可选地,所述读消息请求中还包括是否删除读取到的消息的第三标识;所述消息处理器还适于当根据所述第三标识确定需要删除读取到的消息,且从存储表中顺序读取到一条消息后,从所述存储表中删除读取到的消息。可选地,所述消息处理器通过调用所述分布式存储系统的写接口将消息写入存储表,通过调用所述分布式存储系统的扫描接口从存储表中顺序读取消息。可选地,所述分布式存储系统为Cassandra系统。根据本专利技术的另一个方面,提供了一种实现消息队列的方法,包括:接收消息生产者的写消息请求,所述写消息请求中包括待写入消息和所述待写入消息所属消息队列的第一标识;根据消息队列标识与分布式存储系统中存储表的对应关系,将待写入消息存储到与所述第一标识对应的存储表中;接收消息消费者的读消息请求,所述读消息请求中包括待读取消息所属消息队列的第二标识;根据消息队列标识与分布式存储系统中存储表的对应关系,从与所述第二标识对应的存储表中顺序读取一条消息,将读取到的消息发送到所述消息消费者。可选地,所述方法还包括:建立消息队列标识与分布式存储系统中存储表的对应关系。可选地,所述读消息请求中还包括是否删除读取到的消息的第三标识;所述方法还包括:当根据所述第三标识确定需要删除读取到的消息,且从存储表中顺序读取到一条消息后,从所述存储表中删除读取到的消息。可选地,通过调用所述分布式存储系统的写接口将消息存储到存储表,通过调用所述分布式存储系统的扫描接口从存储表中顺序读取消息。可选地,所述分布式存储系统为Cassandra系统。根据本专利技术上述的一个或多个技术方案,通过引入分布式存储系统作为消息队列的存储模块,使得消息队列能够支持较大消息的存储和传递,并提升了消息队列的可扩展性。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的【具体实施方式】。【专利附图】【附图说明】通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了生产者与消费者通过消息队列进行通信的示意图;图2示出了根据本专利技术一个实施例的实现消息队列的装置结构图;图3示出了根据本专利技术一个实施例的实现消息队列的装置的应用实例;图4示出了根据本专利技术一个实施例的实现消息队列的方法中写消息队列的流程图;图5示出了根据本专利技术一个实施例的实现消息队列的方法中读消息队列的流程图。【具体实施方式】下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图2示出了根据本专利技术一个实施例的实现消息队列的装置结构图。参照图2,所述实现消息队列的装置10可以包括写队列接口 12、读队列接口 14和消息处理器16。写队列接口 12适于接收消息生产者20的写消息请求,所本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:王锋
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:

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

1