CN113760470A - 一种基于事务消息及反查实现分布式事务的方法及*** - Google Patents
一种基于事务消息及反查实现分布式事务的方法及*** Download PDFInfo
- Publication number
- CN113760470A CN113760470A CN202111054256.7A CN202111054256A CN113760470A CN 113760470 A CN113760470 A CN 113760470A CN 202111054256 A CN202111054256 A CN 202111054256A CN 113760470 A CN113760470 A CN 113760470A
- Authority
- CN
- China
- Prior art keywords
- message
- transaction
- order
- local
- check
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000005096 rolling process Methods 0.000 claims abstract description 10
- 230000000977 initiatory effect Effects 0.000 claims description 7
- 230000002159 abnormal effect Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- 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/466—Transaction processing
-
- 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/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种基于事务消息及反查实现分布式事务的方法,所述方法包括以下步骤:步骤S1、消息发送方给消息服务端发送一个半消息;步骤S2、半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务;本发明能够利用事务消息保证分布性事务性,并通过增加事务反查机制来解决事务消息提交失败问题。
Description
技术领域
本发明涉及计算机技术领域,特别是一种基于事务消息及反查实现分布式事务的方法及***。
背景技术
本方法是在订单***中实施,在该***中创建订单的过程中实际上执行了2个步骤的操作(如下图1):
(1)在订单库中***一条订单数据,创建订单;
(2)发消息给消息队列,消息的内容就是刚刚创建的订单。
购物车***订阅相应的主题,接收订单创建的消息,然后清理购物车,在购物车中删除订单中的商品。问题的关键点集中在订单***,创建订单和发送消息这两个步骤要么都操作成功,要么都操作失败,不允许一个成功而另一个失败的情况出现。即有要有一个方案能够保证分布式事务的可靠性,常用的技术方案是分布式锁的机制,一定程度上面可以保障操作的原子性和一致性,但是牺牲了效率(性能),尤其在高并发的场景下,容易出现死锁等情况。
发明内容
为克服上述问题,本发明的目的是提供一种能够利用事务消息保证分布性事务性,并通过增加事务反查机制来解决事务消息提交失败问题的方法。
本发明采用以下方案实现:一种基于事务消息及反查实现分布式事务的方法,所述方法包括以下步骤:
步骤S1、消息发送方给消息服务端发送一个半消息;
步骤S2、半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;
步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;
步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
进一步的,所述步骤S1进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
进一步的,所述步骤S2进一步具体为:半消息发送成功后,告知消息服务端的订单***,订单***开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
进一步的,所述步骤S3进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。
进一步的,所述步骤S4进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
本发明还提供了一种基于事务消息及反查实现分布式事务的***,包括发送模块、告知模块、决定模块和反查模块,所述发送模块,即消息发送方给消息服务端发送一个半消息;所述告知模块,即半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;所述决定模块,即根据本地事务的执行结果决定将半消息提交或回滚事务消息;所述反查模块,即在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
进一步的,所述发送模块进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
进一步的,所述告知模块进一步具体为:半消息发送成功后,告知消息服务端的订单***,订单***开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
进一步的,所述决定模块进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。
进一步的,所述反查模块进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
本发明的有益效果在于:本发明实现订单***中分布式操作事务的一致性要求,同时通过事务反查的机制解决了事务消息提交失败的问题,即使是发送事务消息的那个订单服务节点宕机了,消息队列依然可以通过其他订单服务的节点来执行反查,确保事务的完整性;同时具备更好的性能指标。
附图说明
图1为现有技术流程示意图。
图2是本发明的方法流程示意图。
图3是本发明的***原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图2所示,本发明的一种基于事务消息及反查实现分布式事务的方法,所述方法包括以下步骤:
步骤S1、消息发送方给消息服务端发送一个半消息;
步骤S2、半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;
步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;
步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
下面通过一具体实施例对本发明作进一步说明:
步骤1:消息发送方如订单***消息模块客户端给消息服务端发送一个半消息(Half),这个半消息包含的内容是完整的消息内容,和普通消息的唯一区别是,在事务提交之前,对于消费者来说,这个消息是不可见的。订单***消息模块客户端由客户端和服务端构成,一般会引入消息中间件,如RocketMQ等进行构建;订单***生成的消息推送给消息模块,消息模块会实时告知接受结果。
步骤2:半消息发送成功后,告知订单***,该***开始执行本地事务,如在订单库中创建一条订单记录,并提交订单库的数据库事务。这边的本地事务就是特指业务性质的操作,如发起订单付款操作,跟下面提到的数据库事务是连贯性的操作,业务发起,数据库执行。如发起付款,就会触发“在订单库中创建一条订单记录”;因此本案例中数据库事务完成后会反馈本地事务结果,本地事务以数据库事务结果来给用户做反馈,如提示订单创建失败等。
数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。比如本发明提到的“在订单库中创建一条订单记录”,这个简单的操作在订单***中可能涉及账户余额的预扣款、日志的更新等一系列的数据库操作,那么必须保障全部的数据库操作序列都成功或都不成功,需要放在一个事务中执行。
步骤3:根据本地事务的执行结果决定提交或者回滚事务消息。如果订单创建成功,那就提交事务消息至消息服务端。如果订单创建失败,那就回滚事务消息,这样就基本实现了要么都成功,要么都失败的一致性要求。回滚事务消息,是指如果步骤2创建订单数据库保存没有成功的情况下,通知消息服务端操作失败,不需要向消息订阅方(如果购物车***)发送消息,直接删除本条消息即可。
步骤4:如果在提交或者回滚事务消息时发生网络异常,消息服务端没有收到提交或者回滚的请求,消息服务端会定期去消息发送方(订单***消息模块)上反查这个事务对应的本地事务的状态,然后根据反查结果决定提交或者回滚这个事务。
这个反查本地事务的实现,并不依赖消息的发送方,也就是订单服务的某个实例节点上的任何数据。这种情况下,即使是发送事务消息的那个订单服务节点宕机了,消息队列依然可以通过其他订单服务的节点来执行反查,确保事务的完整性。
事务反查机制的实现需要业务代码中实现一个反查本地事务状态的接口,告知消息队列本地事务是成功还是失败。比如在本发明提到的订单***中,反查本地事务的逻辑只要根据消息中的订单ID,在订单库中查询这个订单是否存在即可,如果订单存在则返回成功,否则返回失败。消息队列会自动根据事务反查的结果,提交或者回滚事务消息。
另外这个反查本地事务的实现,并不依赖消息的发送方,也就是订单服务的某个实例节点上的任何数据。这种情况下,即使是发送事务消息的那个订单服务节点宕机了,消息队列依然可以通过其他订单服务的节点来执行反查,确保事务的完整性。
总之,本发明适用的场景主要是那些需要异步更新数据,并且对数据实时性要求不太高的场景,比如在背景中提到的订单***这个实施案例,在创建订单后,如果出现短暂的1-2秒,购物车里的商品没有及时删除,一定程度上也是允许的设计,只要最终购物车的数据和订单数据保持一致就可以。其总体思路是通过消息队列中的事务,解决消息生产者和消息消费者的数据一致性问题;利用事务消息保证分布式事务性;并通过增加事务反查机制来解决事务消息提交失败的问题,即使是发送事务消息的订单服务节点宕机了,消息服务依然可以通过其他订单服务的节点来执行反查,确保事务的完整性。
请参阅图3所示,本发明还提供了一种基于事务消息及反查实现分布式事务的***,包括发送模块、告知模块、决定模块和反查模块,所述发送模块,即消息发送方给消息服务端发送一个半消息;所述告知模块,即半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;所述决定模块,即根据本地事务的执行结果决定将半消息提交或回滚事务消息;所述反查模块,即在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
所述发送模块进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
所述告知模块进一步具体为:半消息发送成功后,告知消息服务端的订单***,订单***开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
所述决定模块进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。
所述反查模块进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (10)
1.一种基于事务消息及反查实现分布式事务的方法,其特征在于,所述方法包括以下步骤:
步骤S1、消息发送方给消息服务端发送一个半消息;
步骤S2、半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;
步骤S3、根据本地事务的执行结果决定将半消息提交或回滚事务消息;
步骤S4、在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
2.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S1进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
3.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S2进一步具体为:半消息发送成功后,告知消息服务端的订单***,订单***开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
4.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S3进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。
5.根据权利要求1所述的一种基于事务消息及反查实现分布式事务的方法,其特征在于:所述步骤S4进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
6.一种基于事务消息及反查实现分布式事务的***,其特征在于:包括发送模块、告知模块、决定模块和反查模块,所述发送模块,即消息发送方给消息服务端发送一个半消息;所述告知模块,即半消息发送成功后,告知消息服务端的订单***,订单***开始执行半消息的本地事务;所述决定模块,即根据本地事务的执行结果决定将半消息提交或回滚事务消息;所述反查模块,即在半消息提交或回滚事务消息时发生网络异常,消息服务端没有收到提交半消息或回滚的请求,消息服务端会定期反查消息发送方对应的本地事务状态,根据反查结果决定提交或回滚本地事务。
7.根据权利要求6所述的一种基于事务消息及反查实现分布式事务的***,其特征在于:所述发送模块进一步具体为:消息发送方给消息服务端发送一个半消息,所述半消息为消息的完整内容,且对于消费者不可见。
8.根据权利要求6所述的一种基于事务消息及反查实现分布式事务的***,其特征在于:所述告知模块进一步具体为:半消息发送成功后,告知消息服务端的订单***,订单***开始执行本地事务,所述本地事务为业务性质的操作,如在订单库中创建一条订单记录,并提交订单库的数据库事务,所述数据库事务为连贯性的操作,业务发起,数据库执行。
9.根据权利要求6所述的一种基于事务消息及反查实现分布式事务的***,其特征在于:所述决定模块进一步具体为:根据本地事务的执行结果决定将半消息提交或回滚事务消息,判断订单是否创建成功,是,则将事务消息提交至消息服务端,否,则回滚事务消息。
10.根据权利要求6所述的一种基于事务消息及反查实现分布式事务的***,其特征在于:所述反查模块进一步具体为:反查本地事务并不依赖消息发送方,消息服务端通过其他订单服务的节点数据来执行反查,确保本地事务的完整性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111054256.7A CN113760470B (zh) | 2021-09-09 | 2021-09-09 | 一种基于事务消息及反查实现分布式事务的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111054256.7A CN113760470B (zh) | 2021-09-09 | 2021-09-09 | 一种基于事务消息及反查实现分布式事务的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113760470A true CN113760470A (zh) | 2021-12-07 |
CN113760470B CN113760470B (zh) | 2023-11-03 |
Family
ID=78794145
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111054256.7A Active CN113760470B (zh) | 2021-09-09 | 2021-09-09 | 一种基于事务消息及反查实现分布式事务的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113760470B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1822533A (zh) * | 2006-03-27 | 2006-08-23 | 阿里巴巴公司 | 一种可靠的***间消息通知方法和*** |
CN105824842A (zh) * | 2015-01-07 | 2016-08-03 | 阿里巴巴集团控股有限公司 | 分布式事务处理方法及其*** |
CN106775959A (zh) * | 2016-12-06 | 2017-05-31 | 上海亿账通互联网科技有限公司 | 分布式事务处理方法和*** |
EP3333727A1 (en) * | 2016-02-24 | 2018-06-13 | Huawei Technologies Co., Ltd. | Transaction execution method, apparatus, and system |
CN109408203A (zh) * | 2018-11-01 | 2019-03-01 | 无锡华云数据技术服务有限公司 | 一种队列消息一致性的实现方法、装置、计算*** |
CN112698969A (zh) * | 2020-12-30 | 2021-04-23 | 佰年颐堂医疗科技股份有限公司 | 一种基于消息落库的mq消息可靠性投递解决方法 |
CN112882801A (zh) * | 2021-01-28 | 2021-06-01 | 广州衣科明夷信息技术有限公司 | 一种基于mq的分布式事务实现方法 |
-
2021
- 2021-09-09 CN CN202111054256.7A patent/CN113760470B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1822533A (zh) * | 2006-03-27 | 2006-08-23 | 阿里巴巴公司 | 一种可靠的***间消息通知方法和*** |
CN105824842A (zh) * | 2015-01-07 | 2016-08-03 | 阿里巴巴集团控股有限公司 | 分布式事务处理方法及其*** |
EP3333727A1 (en) * | 2016-02-24 | 2018-06-13 | Huawei Technologies Co., Ltd. | Transaction execution method, apparatus, and system |
CN106775959A (zh) * | 2016-12-06 | 2017-05-31 | 上海亿账通互联网科技有限公司 | 分布式事务处理方法和*** |
CN109408203A (zh) * | 2018-11-01 | 2019-03-01 | 无锡华云数据技术服务有限公司 | 一种队列消息一致性的实现方法、装置、计算*** |
CN112698969A (zh) * | 2020-12-30 | 2021-04-23 | 佰年颐堂医疗科技股份有限公司 | 一种基于消息落库的mq消息可靠性投递解决方法 |
CN112882801A (zh) * | 2021-01-28 | 2021-06-01 | 广州衣科明夷信息技术有限公司 | 一种基于mq的分布式事务实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113760470B (zh) | 2023-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108459919B (zh) | 一种分布式事务处理方法及装置 | |
KR102510195B1 (ko) | 트랜잭션 처리 방법, 장치 및 기기, 그리고 컴퓨터 저장 매체 | |
US8185499B2 (en) | System and method for transactional session management | |
US7502843B2 (en) | Server queuing system and method | |
CN106844014B (zh) | 分布式事务防悬挂的实现方法和装置 | |
WO2016177285A1 (zh) | 一种数据推送方法及装置 | |
CN111259083A (zh) | 分布式事务处理方法及装置 | |
CN107766080B (zh) | 事务消息处理方法、装置、设备及*** | |
CN110888893A (zh) | 一种基于微服务电商***的订单处理方法 | |
CN111784329B (zh) | 业务数据的处理方法和装置、存储介质、电子装置 | |
US20070288934A1 (en) | Apparatus, system, and method for asynchronous complex inbound transactions from sap applications using service oriented architecture | |
CN114253673A (zh) | 一种分布式***的事务处理方法和事务处理装置 | |
AU771514B2 (en) | Preserving consistency of passively-replicated non-deterministic objects | |
CN112256776B (zh) | 表单重复提交检测方法、装置、计算机设备和存储介质 | |
CN113760470B (zh) | 一种基于事务消息及反查实现分布式事务的方法及*** | |
CN112632093A (zh) | 工单处理方法、设备、***、存储介质及程序产品 | |
CN116662035A (zh) | 消息队列事务消息的处理方法和装置 | |
CN115964133A (zh) | 一种消息管理方法、装置、设备及存储介质 | |
CN114579260A (zh) | 一种事务处理方法及*** | |
CN114612204A (zh) | 对账方法及装置 | |
CN111861746A (zh) | 一种处理交易数据的方法和装置 | |
US6868418B1 (en) | Methods and systems for performing reliable asynchronous notification of high-level document operations | |
CN117348978A (zh) | 一种分布式事务管理方法及*** | |
CN115756768B (zh) | 基于saga的分布式事务处理方法、装置、设备及介质 | |
Varakantham et al. | On handling component and transaction failures in multi agent systems |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |