[发明专利]消息队列消费方法和装置在审
申请号: | 201810806478.1 | 申请日: | 2018-07-20 |
公开(公告)号: | CN108984325A | 公开(公告)日: | 2018-12-11 |
发明(设计)人: | 林皓;侯泽红;党艳平 | 申请(专利权)人: | 北京北信源信息安全技术有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06Q30/06 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;李相雨 |
地址: | 100093 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 业务消息 消息队列 业务流水号 业务标识 方法和装置 查询结果 发送端的 消息记录 有效处理 并发性 重复 解析 数据库 发送 查询 携带 分配 保证 | ||
本发明实施例提供一种消息队列的消费方法和装置。所述方法包括:为生产者发送的每条业务消息分配一个业务流水号,所述业务消息携带业务标识;在消费者从消息队列中获取业务消息之后,解析出所述业务消息的业务标识和业务流水号,根据所述业务标识和业务流水号生成所述业务消息的行健值;在消息记录数据库中查询是否存在所述行健值;根据查询结果对所述业务消息取消消费或者进行消费。本发明实施例通过在消费端取消重复消息的消费,能够在保证消息队列在发送端的高并发性的同时对重复消息进行有效处理。
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种消息队列消费方法和装置。
背景技术
消息队列(Message Queue,简称MQ)是一项高可用、高并发、高可扩展、低延时的分布式消息队列服务,在高并发高访问的分布式电商网站的一些热销产品通常在后台更新产品相关信息时,利用消息队列用于异步同步该产品的相关信息,例如在秒杀或团抢活动中使用广泛。
消息队列模型通常包括生产者、消息队列以及消费者,以电商应用场景为例,消息队列模型的应用描述如下:订单系统(生产者)在用户下单后,将订单消息写入消息队列;库存系统(消费者)订阅下单的消息,采用拉/推的方式,从消息队列获取下单信息,进行库存操作。
现有的消息队列组件(如Kafka、RocketMQ)在使用时都存在一个共同的问题:在网络不稳定的情况下,消息有可能重复。消息的重复包括发送端(生产者)的重复和消费端(消费者)的重复两个方面,即发送端发送重复的消息以及消费端重复消费同一条消息。对于大部分业务场景而言,重复的消息是非常危险的,例如一条订单不能让用户支付多次,也不可能发货多次。
因此,如何处理重复消息成为亟待解决的问题。
发明内容
本发明实施例提供一种消息队列消费方法和装置,用以解决现有技术中消息重复的问题。
一方面,本发明实施例提供一种消息队列消费方法,所述方法包括:
为生产者发送的每条业务消息分配一个业务流水号,所述业务消息携带业务标识;
在消费者从消息队列中获取业务消息之后,解析出所述业务消息的业务标识和业务流水号,根据所述业务标识和业务流水号生成所述业务消息的行健值;
在消息记录数据库中查询是否存在所述行健值;
根据查询结果对所述业务消息取消消费或者进行消费。
另一方面,本发明实施例提供一种消息队列消费装置,所述装置包括:
分配单元,用于为生产者发送的每条业务消息分配一个业务流水号,所述业务消息携带业务标识;
解析单元,用于在消费者从消息队列中获取业务消息之后,解析出所述业务消息的业务标识和业务流水号;
生成单元,用于根据所述业务标识和业务流水号生成所述业务消息的行健值;
查询单元,用于在消息记录数据库中查询是否存在所述行健值;
处理单元,用于根据查询结果对所述业务消息取消消费或者进行消费。
另一方面,本发明实施例还提供一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述消息队列消费方法的步骤。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述消息队列消费方法的步骤。
本发明实施例通过在消费端取消重复消息的消费,能够在保证消息队列在发送端的高并发性的同时对重复消息进行有效处理。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京北信源信息安全技术有限公司,未经北京北信源信息安全技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810806478.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:FPGA硬件抽象层
- 下一篇:一种用于在机动车辆中的软件组件之间通信的方法