CN112991022A - 分布式订单系统数据利用mq实现最终一致性的方法及系统 - Google Patents
分布式订单系统数据利用mq实现最终一致性的方法及系统 Download PDFInfo
- Publication number
- CN112991022A CN112991022A CN202110427426.5A CN202110427426A CN112991022A CN 112991022 A CN112991022 A CN 112991022A CN 202110427426 A CN202110427426 A CN 202110427426A CN 112991022 A CN112991022 A CN 112991022A
- Authority
- CN
- China
- Prior art keywords
- order
- user
- message
- commodity
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/06—Buying, selling or leasing transactions
- G06Q30/0601—Electronic shopping [e-shopping]
- G06Q30/0633—Lists, e.g. purchase orders, compilation or processing
- G06Q30/0635—Processing of requisition or of purchase orders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- General Engineering & Computer Science (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了分布式订单系统数据利用MQ实现最终一致性的方法,所述方法包括以下步骤:步骤S1、用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;步骤S2、库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;步骤S3、订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;步骤S4、积分服务收到MQ的消息后,更新用户积分数据,完成订单流程;本发明能够利用MQ发布订阅的功能来进行分步骤的通知,以此来实现订单的流程最终完成,达成最终一致性。
Description
技术领域
本发明涉及订单支付技术领域,特别是分布式订单系统数据利用MQ实现最终一致性的方法及系统。
背景技术
在订单系统中,用户从选购商品到成功付款,系统需要跨多个服务去更新数据库数据,包含订单服务、商品库存服务、用户积分服务。由于服务之间是独立部署的,无法利用mysql的事务来保证流程的原子性。如果是秒杀系统我们要严格保证商品库存以防超卖,使用分布式事务中间件来实现系统的强一致性,会降低系统的吞吐量。但大部分购买场景都是商品数据量充足的普通商品,所以我们只要保证每个服务及时出现操作数据库失败,只要能最终完成订单流程即可,满足最终一致性,又不降低系统的吞吐量。
发明内容
为克服上述问题,本发明的目的是提供一种能够利用MQ发布订阅的功能来进行分步骤的通知,以此来实现订单的流程最终完成,达成最终一致性的分布式订单系统数据利用MQ实现最终一致性的方法。
本发明采用以下方案实现:分布式订单系统数据利用MQ实现最终一致性的方法,所述方法包括以下步骤:
步骤S1、用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;
步骤S2、库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;
步骤S3、订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;
步骤S4、积分服务收到MQ的消息后,更新用户积分数据,完成订单流程。
进一步的,所述步骤S1进一步具体为:用户下单访问api网关,网关作为系统的入口,负责检测服务是否均可用,是,则生成订单号,否,则提示用户系统繁忙,请稍后再试。
进一步的,所述步骤S2进一步具体为:库存服务收到MQ的消息后,获得订单号、用户的商品ID和购买数量信息,读取商品,扣减库存,检测库存服务更新是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ,否,则不应答,等待重试。
进一步的,所述步骤S3进一步具体为:订单服务收到MQ的消息后,获得订单号和用户的商品ID,根据订单号生成订单数据,判断数据库新增是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ中,否,则不应答,等待重试。
进一步的,所述步骤S4进一步具体为:积分服务收到MQ的消息后,获得订单号和用户的商品ID,读取商品获得商品的积分数据,更新用户积分,判断数据库中积分更新是否成功,是,则应答MQ消息已消费完成,订单流程结束,否,则不应答,等待重试。
进一步的,所述步骤S4后还包括当步骤S2-步骤S4中的失败重试出现次数大于5次时,则视为订单异常,将订单号和用户的商品ID存入异常库,进行排查。
本发明还提供了分布式订单系统数据利用MQ实现最终一致性的系统,包括访问模块、库存模块、订单模块和积分模块;
所述访问模块,即用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;
所述库存模块,即库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;
所述订单模块,即订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;
所述积分模块,即积分服务收到MQ的消息后,更新用户积分数据,完成订单流程。
进一步的,所述访问模块进一步具体为:用户下单访问api网关,网关作为系统的入口,负责检测服务是否均可用,是,则生成订单号,否,则提示用户系统繁忙,请稍后再试。
进一步的,所述库存模块进一步具体为:库存服务收到MQ的消息后,获得订单号、用户的商品ID和购买数量信息,读取商品,扣减库存,检测库存服务更新是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ,否,则不应答,等待重试。
进一步的,所述订单模块进一步具体为:订单服务收到MQ的消息后,获得订单号和用户的商品ID,根据订单号生成订单数据,判断数据库新增是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ中,否,则不应答,等待重试。
进一步的,所述积分模块进一步具体为:积分服务收到MQ的消息后,获得订单号和用户的商品ID,读取商品获得商品的积分数据,更新用户积分,判断数据库中积分更新是否成功,是,则应答MQ消息已消费完成,订单流程结束,否,则不应答,等待重试。
进一步的,还包括异常模块,所述异常模块,即当库存模块、订单模块和积分模块中的失败重试出现次数大于5次时,则视为订单异常,将订单号和用户的商品ID存入异常库,进行排查。
本发明的有益效果在于:本发明利用MQ发布订阅的功能来进行分步骤的通知,以此来实现订单的流程最终完成,达成最终一致性,有效的对系统进行解耦,在不降低系统吞吐量的情况下,满足订单系统数据的最终一致性。
附图说明
图1是本发明的方法流程示意图。
图2是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明的分布式订单系统数据利用MQ实现最终一致性的方法,所述方法包括以下步骤:
步骤S1、用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;
步骤S2、库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;
步骤S3、订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;
步骤S4、积分服务收到MQ的消息后,更新用户积分数据,完成订单流程。
下面结合一具体实施例对本发明作进一步说明:
步骤1:访问api网关
用户下单访问api网关,网关作为系统的入口,负责检测服务是否均可用,如存在不可用情况返回用户系统繁忙,请稍后再试。如果系统正常,则生成一个订单号,发送订单号、商品ID、购买数量至队列名为mq_stock的MQ。
步骤2:库存服务收到mq_stock的消息
库存服务收到mq_stock的消息后,获得订单号、商品ID、购买数量3个信息,读取商品,扣减库存,如果更新失败则不应答,等待重试。如果更新库存数据库成功,则应答mq_stock消息已消费完成,并且发送订单号、商品ID至队列名为mq_order的MQ。
步骤3:订单服务收到mq_order的消息
订单服务收到mq_order的消息后,获得订单号和商品ID,根据订单号生成订单数据,如果数据库新增失败则不应答,等待重试。如果新增数据库成功,则应答mq_order消息已消费完成,并且发送订单号、商品ID至队列名为mq_point的MQ。
步骤4:积分服务收到mq_point的消息
积分服务收到mq_point的消息后,获得订单号和商品ID,读取商品获得商品积分数据,开始更新用户积分,如果数据库更新失败则不应答,等待重试。如果数据更新成功,则应答mq_point消息已消费完成。订单流程结束。积分服务收到MQ的消息后,更新用户积分数据成功,完成订单流程。每个步骤收到MQ消息后,将数据处理完成,利用MQ触发下一步操作,如果数据处理失败,这条消息将会保留在MQ中,直到下次重试。如果多次重试仍然失败,则记录订单号到异常库中,等待人工干预。
步骤5:失败兜底服务
步骤2-4的失败重试如果分别出现大于5次的情况,则视为异常,存入订单号和商品ID至异常库,人工干预排查。
本发明中的MQ(Message Queue)是消息队列,是一种中间件服务,目前常见的有rabbitmq、rocketmq、kafka等。
总之,本发明能够提供一种发布与订阅机制,以实现通知功能,使原本同一个流程的业务可以解耦成异步,最终一致性有别于强一致性,不需要在过程中增加锁操作来保证原子性,利用MQ发布订阅的功能来进行分步骤的通知,以此来实现订单的流程最终完成,达成最终一致性。
本发明还提供了分布式订单系统数据利用MQ实现最终一致性的系统,包括访问模块、库存模块、订单模块和积分模块;
所述访问模块,即用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;
所述库存模块,即库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;
所述订单模块,即订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;
所述积分模块,即积分服务收到MQ的消息后,更新用户积分数据,完成订单流程。
进一步的,所述访问模块进一步具体为:用户下单访问api网关,网关作为系统的入口,负责检测服务是否均可用,是,则生成订单号,否,则提示用户系统繁忙,请稍后再试。
进一步的,所述库存模块进一步具体为:库存服务收到MQ的消息后,获得订单号、用户的商品ID和购买数量信息,读取商品,扣减库存,检测库存服务更新是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ,否,则不应答,等待重试。
进一步的,所述订单模块进一步具体为:订单服务收到MQ的消息后,获得订单号和用户的商品ID,根据订单号生成订单数据,判断数据库新增是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ中,否,则不应答,等待重试。
进一步的,所述积分模块进一步具体为:积分服务收到MQ的消息后,获得订单号和用户的商品ID,读取商品获得商品的积分数据,更新用户积分,判断数据库中积分更新是否成功,是,则应答MQ消息已消费完成,订单流程结束,否,则不应答,等待重试。
进一步的,还包括异常模块,所述异常模块,即当库存模块、订单模块和积分模块中的失败重试出现次数大于5次时,则视为订单异常,将订单号和用户的商品ID存入异常库,进行排查。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (12)
1.分布式订单系统数据利用MQ实现最终一致性的方法,其特征在于,所述方法包括以下步骤:
步骤S1、用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;
步骤S2、库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;
步骤S3、订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;
步骤S4、积分服务收到MQ的消息后,更新用户积分数据,完成订单流程。
2.根据权利要求1所述的分布式订单系统数据利用MQ实现最终一致性的方法,其特征在于:所述步骤S1进一步具体为:用户下单访问api网关,网关作为系统的入口,负责检测服务是否均可用,是,则生成订单号,否,则提示用户系统繁忙,请稍后再试。
3.根据权利要求1所述的分布式订单系统数据利用MQ实现最终一致性的方法,其特征在于:所述步骤S2进一步具体为:库存服务收到MQ的消息后,获得订单号、用户的商品ID和购买数量信息,读取商品,扣减库存,检测库存服务更新是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ,否,则不应答,等待重试。
4.根据权利要求1所述的分布式订单系统数据利用MQ实现最终一致性的方法,其特征在于:所述步骤S3进一步具体为:订单服务收到MQ的消息后,获得订单号和用户的商品ID,根据订单号生成订单数据,判断数据库新增是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ中,否,则不应答,等待重试。
5.根据权利要求1所述的分布式订单系统数据利用MQ实现最终一致性的方法,其特征在于:所述步骤S4进一步具体为:积分服务收到MQ的消息后,获得订单号和用户的商品ID,读取商品获得商品的积分数据,更新用户积分,判断数据库中积分更新是否成功,是,则应答MQ消息已消费完成,订单流程结束,否,则不应答,等待重试。
6.根据权利要求1所述的分布式订单系统数据利用MQ实现最终一致性的方法,其特征在于:所述步骤S4后还包括当步骤S2-步骤S4中的失败重试出现次数大于5次时,则视为订单异常,将订单号和用户的商品ID存入异常库,进行排查。
7.分布式订单系统数据利用MQ实现最终一致性的系统,其特征在于:包括访问模块、库存模块、订单模块和积分模块;
所述访问模块,即用户下单访问api网关,回复下单成功信息给用户,并生成订单号发送给MQ;
所述库存模块,即库存服务收到MQ的消息后,扣减库存,成功后,生成库存扣减成功的消息给MQ;
所述订单模块,即订单服务收到MQ的消息后,创建订单,生成订单生成成功的消息至MQ中;
所述积分模块,即积分服务收到MQ的消息后,更新用户积分数据,完成订单流程。
8.根据权利要求7所述的分布式订单系统数据利用MQ实现最终一致性的系统,其特征在于:所述访问模块进一步具体为:用户下单访问api网关,网关作为系统的入口,负责检测服务是否均可用,是,则生成订单号,否,则提示用户系统繁忙,请稍后再试。
9.根据权利要求7所述的分布式订单系统数据利用MQ实现最终一致性的系统,其特征在于:所述库存模块进一步具体为:库存服务收到MQ的消息后,获得订单号、用户的商品ID和购买数量信息,读取商品,扣减库存,检测库存服务更新是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ,否,则不应答,等待重试。
10.根据权利要求7所述的分布式订单系统数据利用MQ实现最终一致性的系统,其特征在于:所述订单模块进一步具体为:订单服务收到MQ的消息后,获得订单号和用户的商品ID,根据订单号生成订单数据,判断数据库新增是否成功,是,则应答MQ消息已消费完成,并发送订单号和商品ID至MQ中,否,则不应答,等待重试。
11.根据权利要求7所述的分布式订单系统数据利用MQ实现最终一致性的系统,其特征在于:所述积分模块进一步具体为:积分服务收到MQ的消息后,获得订单号和用户的商品ID,读取商品获得商品的积分数据,更新用户积分,判断数据库中积分更新是否成功,是,则应答MQ消息已消费完成,订单流程结束,否,则不应答,等待重试。
12.根据权利要求7所述的分布式订单系统数据利用MQ实现最终一致性的系统,其特征在于:还包括异常模块,所述异常模块,即当库存模块、订单模块和积分模块中的失败重试出现次数大于5次时,则视为订单异常,将订单号和用户的商品ID存入异常库,进行排查。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110427426.5A CN112991022A (zh) | 2021-04-21 | 2021-04-21 | 分布式订单系统数据利用mq实现最终一致性的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110427426.5A CN112991022A (zh) | 2021-04-21 | 2021-04-21 | 分布式订单系统数据利用mq实现最终一致性的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112991022A true CN112991022A (zh) | 2021-06-18 |
Family
ID=76341405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110427426.5A Pending CN112991022A (zh) | 2021-04-21 | 2021-04-21 | 分布式订单系统数据利用mq实现最终一致性的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112991022A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113392119A (zh) * | 2021-06-30 | 2021-09-14 | 上海万物新生环保科技集团有限公司 | 一种数据一致性处理方法及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190089809A1 (en) * | 2017-09-15 | 2019-03-21 | Oracle International Corporation | Dynamic message queues for a microservice based cloud service |
CN110750338A (zh) * | 2019-08-30 | 2020-02-04 | 深圳壹账通智能科技有限公司 | 订单数据的处理方法及装置、存储介质、计算机设备 |
CN111177158A (zh) * | 2018-11-12 | 2020-05-19 | 商派软件有限公司 | 一种订单与库存匹配一致的方法 |
CN112671827A (zh) * | 2020-11-25 | 2021-04-16 | 紫光云技术有限公司 | 一种分布式事务最终一致性方法 |
-
2021
- 2021-04-21 CN CN202110427426.5A patent/CN112991022A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190089809A1 (en) * | 2017-09-15 | 2019-03-21 | Oracle International Corporation | Dynamic message queues for a microservice based cloud service |
CN111177158A (zh) * | 2018-11-12 | 2020-05-19 | 商派软件有限公司 | 一种订单与库存匹配一致的方法 |
CN110750338A (zh) * | 2019-08-30 | 2020-02-04 | 深圳壹账通智能科技有限公司 | 订单数据的处理方法及装置、存储介质、计算机设备 |
CN112671827A (zh) * | 2020-11-25 | 2021-04-16 | 紫光云技术有限公司 | 一种分布式事务最终一致性方法 |
Non-Patent Citations (2)
Title |
---|
徐进等: "基于消息通信的分布式系统最终一致性平台", 《计算机应用》 * |
阿里巴巴中间件: "如何通过事务消息保障抢购业务的分布式一致性?", 《HTTPS://WWW.INFOQ.CN/ARTICLE/BJ9LZYVL02TWIXVTR1E8》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113392119A (zh) * | 2021-06-30 | 2021-09-14 | 上海万物新生环保科技集团有限公司 | 一种数据一致性处理方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111752957B (zh) | 一种基于缓存化的销售锁定方法及系统 | |
US8473316B1 (en) | System and method for order processing state management | |
US7647251B2 (en) | Process integration error and conflict handling | |
JP4201291B2 (ja) | 電子値札による商品価格同期装置及び商品価格同期方法 | |
US20170255990A1 (en) | Optimistic product order reservation system and method | |
CN109885382A (zh) | 跨系统分布式事务处理方法和分布式事务处理的系统 | |
CN112579620A (zh) | 一种基于消息队列的分布式系统数据最终一致性方法 | |
CN112486719A (zh) | 一种用于rpc接口调用失败处理的方法及设备 | |
CN112991022A (zh) | 分布式订单系统数据利用mq实现最终一致性的方法及系统 | |
CN111353841B (zh) | 单据数据处理方法、装置及系统 | |
CN112990823A (zh) | 一种实现库存管理的方法、系统及存储介质 | |
CN113706140A (zh) | 一种基于云pos的智能支付和退款方法以及电子设备 | |
CN106651527A (zh) | 多进程的订单信息处理方法 | |
US8489436B1 (en) | System and method for an order handling data model with item-level granularity | |
CN112990871A (zh) | 一种单据处理方法及相关设备 | |
US7146385B1 (en) | System and method for application-transparent synchronization with a persistent data store | |
CN106845966B (zh) | 货款信息处理方法及装置 | |
CN111581227A (zh) | 事件推送方法、装置、计算机设备及存储介质 | |
US20050144089A1 (en) | Shipment and delivery management system | |
WO2014186699A1 (en) | Transferring transactions between local and central point of service servers | |
CN112416952B (zh) | 管理及同步库存数据的方法、设备、可读存储介质 | |
KR101708697B1 (ko) | 국가 간 신용카드 결제 대행 중개 서비스 장치 및 방법 | |
CN112990811B (zh) | 一种基于区块链的仓单处理方法及仓单处理系统 | |
CN109447758B (zh) | 应用内购买的方法和相关装置 | |
CN113344680A (zh) | 一种订单处理方法、相关装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210618 |