消息队列的消费方法及装置制造方法及图纸

技术编号:15289904 阅读:233 留言:0更新日期:2017-05-10 17:05
本发明专利技术公开了一种消息队列的消费方法及装置,至少能够解决现有技术中默认根据之前记录的当前数据偏移进行消费所导致的消费失败的技术问题。该方法包括:当消费任务启动时,获取所述消费任务对应的消息队列的最旧数据偏移;将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较;当所述最旧数据偏移小于所述当前数据偏移时,根据所述当前数据偏移读取该消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移。

Method and apparatus for consumption of message queue

The invention discloses a method and a device for consumption of a message queue, which can at least solve the technical problem that the consumption of the consumer in the prior art is caused by the consumption of the current data offset which is recorded in the prior art. The method includes: when the consumer task starts, the old data migration to obtain the corresponding consumption task message queue; the current data offset of the message queue the old data offset the message queue and stored in advance are compared; when the most old data offset less than that of the current data migration according to the current data, the data migration reads the message in the message queue; whenever a message reads data from the message queue, the message queue according to the current data offset offset address to update the message data corresponding to the pre stored.

【技术实现步骤摘要】

本专利技术涉及通信
,具体涉及一种消息队列的消费方法及装置
技术介绍
目前,当业务前端生产者产生消息之后,通常是将待处理的消息存储于消息队列的消息分区中,然后交由后端的消费端进行处理。在现有技术中,每当消费端的消费任务启动时,默认根据之前记录的当前数据偏移进行消费。但是,专利技术人在实现本专利技术的过程中发现,现有技术中的上述方式至少存在下述缺陷:由于消息队列中存储的消息数据会定期进行删除,一旦之前记录的当前数据偏移所对应位置的消息已被删除,则会导致消费失败现象,由此会影响整个数据处理系统的正常运行。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的消息队列的消费方法及装置。根据本专利技术的一个方面,提供了一种消息对列的消费方法,包括:当消费任务启动时,获取所述消费任务对应的消息队列的最旧数据偏移;将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较;当所述最旧数据偏移小于所述当前数据偏移时,根据所述当前数据偏移读取该消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移。可选地,当所述最旧数据偏移不小于所述当前数据偏移时,根据所述最旧数据偏移读取该消息队列中的消息数据。可选地,所述消息队列具有多个消息分区,且所述预先存储的该消息队列的当前数据偏移包括:该消息队列的各个消息分区的当前数据偏移;所述获取所述消息队列的最旧数据偏移具体为:分别获取所述消息队列的各个消息分区的最旧数据偏移;所述将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较的步骤具体为:分别将所述消息队列的各个消息分区的最旧数据偏移与预先存储的该消息队列相应的消息分区的当前数据偏移进行比较;所述根据该条消息数据对应的偏移地址更新所述存储的该消息队列的当前数据偏移的步骤具体为:根据该条消息数据对应的偏移地址更新该消息队列相应的消息分区的当前数据偏移。可选地,所述根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移的步骤具体包括:创建用于更新当前数据偏移的事务,该事务包括:用于写入该条消息数据对应的偏移地址的第一操作,以及用于写入该条消息数据的数据内容的第二操作;当该事务中包含的第一操作和第二操作都执行成功时,向后台数据库提交该事务;当该事务中包含的第一操作和/或第二操作执行失败时,回滚该事务。可选地,所述获取所述消息队列的最旧数据偏移的步骤具体包括:与用于维护所述消息队列的队列服务器之间建立通信连接,通过所述通信连接获取所述消息队列的最旧数据偏移。可选地,所述消息队列为分布式消息队列。依据本专利技术的另一方面,提供了一种消息对列的消费装置,包括:获取模块,适于当消费任务启动时,获取所述消费任务对应的消息队列的最旧数据偏移;比较模块,适于将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较;读取模块,适于当所述最旧数据偏移小于所述当前数据偏移时,根据所述当前数据偏移读取该消息队列中的消息数据;更新模块,适于每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移。可选地,所述读取模块进一步适于:当所述最旧数据偏移不小于所述当前数据偏移时,根据所述最旧数据偏移读取该消息队列中的消息数据。可选地,所述消息队列具有多个消息分区,且所述预先存储的该消息队列的当前数据偏移包括:该消息队列的各个消息分区的当前数据偏移;所述获取模块具体适于:分别获取所述消息队列的各个消息分区的最旧数据偏移;所述比较模块具体适于:分别将所述消息队列的各个消息分区的最旧数据偏移与预先存储的该消息队列相应的消息分区的当前数据偏移进行比较;所述更新模块具体适于:根据该条消息数据对应的偏移地址更新该消息队列相应的消息分区的当前数据偏移。可选地,所述更新模块具体适于:创建用于更新当前数据偏移的事务,该事务包括:用于写入该条消息数据对应的偏移地址的第一操作,以及用于写入该条消息数据的数据内容的第二操作;当该事务中包含的第一操作和第二操作都执行成功时,向后台数据库提交该事务;当该事务中包含的第一操作和/或第二操作执行失败时,回滚该事务。可选地,所述获取模块具体适于:与用于维护所述消息队列的队列服务器之间建立通信连接,通过所述通信连接获取所述消息队列的最旧数据偏移。可选地,所述消息队列为分布式消息队列。在本专利技术提供的一种消息队列的消费方法及装置中,每当消费任务启动时,能够获取到该消费任务对应的消息队列的最旧数据偏移,并将该消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较,只有在最旧数据偏移小于当前数据偏移时,才根据当前数据偏移读取该消息队列中的消息数据。由此可见,本申请中的方式能够判断出当前数据偏移所对应位置的消息是否已被删除,从而避免了消费失败的现象,提升了整个数据处理系统的可靠性。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了本专利技术实施例一提供的一种消息队列的消费方法的流程示意图;图2示出了本专利技术实施例二提供的一种消息队列的消费方法的流程示意图;图3示出了本专利技术实施例三提供的一种消息队列的消费装置的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。本专利技术实施例提供了一种消息队列的消费方法及装置,至少能够解决现有技术中默认根据之前记录的当前数据偏移进行消费所导致的消费失败的技术问题。实施例一图1示出了本专利技术实施例一提供的一种消息队列的消费方法的流程示意图,该方法包括:步骤S110:当消费任务启动时,获取所述消费任务对应的消息队列的最旧数据偏移。其中,消费任务是指:消费端读取并处理消息队列的任务。其中,一个消息队列可能对应一个或多个消费任务,一个消费任务也可能对应一个或多个消息队列。当一个消费任务启动时,获取该消费任务对应的消息队列的最旧数据偏移。其中,消费任务的启动包括消费任务第一次开启以及消费任务中断后的重启等各种情形。步骤S120:将该消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较。具体地,获取到该消息队列的最旧数据偏移之后,进一步获取预先存储的该消息队列的当前数据偏移,以便将最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较。其中,该消息队列的当前数据偏移可以通过多种方式进行存储,例如,可以由执行该消费任务的消费端存储在本地,也可以由专门的后台数据库负责存储,本专利技术对该消息队列的本文档来自技高网...
消息队列的消费方法及装置

【技术保护点】
一种消息对列的消费方法,包括:当消费任务启动时,获取所述消费任务对应的消息队列的最旧数据偏移;将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较;当所述最旧数据偏移小于所述当前数据偏移时,根据所述当前数据偏移读取该消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移。

【技术特征摘要】
1.一种消息对列的消费方法,包括:当消费任务启动时,获取所述消费任务对应的消息队列的最旧数据偏移;将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较;当所述最旧数据偏移小于所述当前数据偏移时,根据所述当前数据偏移读取该消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移。2.根据权利要求1所述的方法,其中,当所述最旧数据偏移不小于所述当前数据偏移时,根据所述最旧数据偏移读取该消息队列中的消息数据。3.根据权利要求1或2所述的方法,其中,所述消息队列具有多个消息分区,且所述预先存储的该消息队列的当前数据偏移包括:该消息队列的各个消息分区的当前数据偏移;所述获取所述消息队列的最旧数据偏移具体为:分别获取所述消息队列的各个消息分区的最旧数据偏移;所述将所述消息队列的最旧数据偏移与预先存储的该消息队列的当前数据偏移进行比较的步骤具体为:分别将所述消息队列的各个消息分区的最旧数据偏移与预先存储的该消息队列相应的消息分区的当前数据偏移进行比较;所述根据该条消息数据对应的偏移地址更新所述存储的该消息队列的当前数据偏移的步骤具体为:根据该条消息数据对应的偏移地址更新该消息队列相应的消息分区的当前数据偏移。4.根据权利要求1-3任一所述的方法,其中,所述根据该条消息数据对应的偏移地址更新所述预先存储的该消息队列的当前数据偏移的步骤具体包括:创建用于更新当前数据偏移的事务,该事务包括:用于写入该条消息数据对应的偏移地址的第一操作,以及用于写入该条消息数据的数据内容的第二操作;当该事务中包含的第一操作和第二操作都执行成功时,向后台数据库提交该事务;当该事务中包含的第一操作和/或第二操作执行失败时,回滚该事务。5.根据权利要求1-4任一所述的方法,其中,所述获取所述消息队列...

【专利技术属性】
技术研发人员:邓怡豪
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京;11

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

1