[发明专利]一种实现消息队列的方法及装置在审
| 申请号: | 201310683683.0 | 申请日: | 2013-12-13 |
| 公开(公告)号: | CN103761141A | 公开(公告)日: | 2014-04-30 |
| 发明(设计)人: | 王锋 | 申请(专利权)人: | 北京奇虎科技有限公司;奇智软件(北京)有限公司 |
| 主分类号: | G06F9/46 | 分类号: | G06F9/46 |
| 代理公司: | 北京思睿峰知识产权代理有限公司 11396 | 代理人: | 赵爱军 |
| 地址: | 100088 北京市西城区新*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 实现 消息 队列 方法 装置 | ||
技术领域
本发明涉及计算机技术领域,具体涉及一种实现消息队列的方法及装置。
背景技术
消息(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系统。
根据本发明的另一个方面,提供了一种实现消息队列的方法,包括:
接收消息生产者的写消息请求,所述写消息请求中包括待写入消息和所述待写入消息所属消息队列的第一标识;
根据消息队列标识与分布式存储系统中存储表的对应关系,将待写入消息存储到与所述第一标识对应的存储表中;
接收消息消费者的读消息请求,所述读消息请求中包括待读取消息所属消息队列的第二标识;
根据消息队列标识与分布式存储系统中存储表的对应关系,从与所述第二标识对应的存储表中顺序读取一条消息,将读取到的消息发送到所述消息消费者。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇虎科技有限公司;奇智软件(北京)有限公司,未经北京奇虎科技有限公司;奇智软件(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310683683.0/2.html,转载请声明来源钻瓜专利网。





