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

技术编号:15519211 阅读:35 留言:0更新日期:2017-06-04 09:08
本发明专利技术公开了一种消息队列的消费方法及装置,至少能够解决现有技术中每次重启后均从消息队列的最旧数据偏移位置进行消费所导致的重复消费的技术问题。该方法包括:当消费任务启动时,建立与后台数据库之间的通信连接;通过所述通信连接从所述后台数据库中获取与所述消费任务对应的消息队列的当前偏移信息;若获取成功,则根据获取到的当前偏移信息读取所述消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址在所述后台数据库中更新所述消息队列的当前偏移信息。

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

【技术保护点】
一种消息队列的消费方法,包括:当消费任务启动时,建立与后台数据库之间的通信连接;通过所述通信连接从所述后台数据库中获取与所述消费任务对应的消息队列的当前偏移信息;若获取成功,则根据获取到的当前偏移信息读取所述消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址在所述后台数据库中更新所述消息队列的当前偏移信息。

【技术特征摘要】
1.一种消息队列的消费方法,包括:当消费任务启动时,建立与后台数据库之间的通信连接;通过所述通信连接从所述后台数据库中获取与所述消费任务对应的消息队列的当前偏移信息;若获取成功,则根据获取到的当前偏移信息读取所述消息队列中的消息数据;每当从所述消息队列中读取一条消息数据后,根据该条消息数据对应的偏移地址在所述后台数据库中更新所述消息队列的当前偏移信息。2.根据权利要求1所述的方法,其中,所述根据该条消息数据对应的偏移地址在所述后台数据库中更新所述消息队列的当前偏移信息的步骤具体包括:创建用于更新偏移信息的事务,该事务包括:用于写入该条消息数据对应的偏移地址的第一操作,以及用于写入该条消息数据的数据内容的第二操作;当该事务中包含的第一操作和第二操作都执行成功时,向所述后台数据库提交该事务。3.根据权利要求2所述的方法,其中,当该事务中包含的第一操作和/或第二操作执行失败时,回滚该事务,并重启所述消费任务。4.根据权利要求1-3任一所述的方法,其中,所述通过所述通信连接从所述后台数据库中获取与所述消费任务对应的消息队列的当前偏移信息的步骤之后,进一步包括:获取所述消息队列的有效数据范围;若所述获取成功,则根据获取到的当前偏移信息逐条读取所述消息队列中的消息数据的步骤具体包括:判断所述获取到的当前偏移信息是否在所述有效数据范围内,若判断结果为是,从所述当前偏移信息对应的位置逐条读取所述消息队列中的消息数据;若判断结果为否,从所述有效数据范...

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

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

1