CN113094362A - 一种异步消息可靠投递和处理的方法和装置 - Google Patents
一种异步消息可靠投递和处理的方法和装置 Download PDFInfo
- Publication number
- CN113094362A CN113094362A CN202110489210.1A CN202110489210A CN113094362A CN 113094362 A CN113094362 A CN 113094362A CN 202110489210 A CN202110489210 A CN 202110489210A CN 113094362 A CN113094362 A CN 113094362A
- Authority
- CN
- China
- Prior art keywords
- message
- data
- database
- asynchronous
- business
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 193
- 238000000034 method Methods 0.000 title claims abstract description 123
- 230000008569 process Effects 0.000 claims abstract description 64
- 238000004590 computer program Methods 0.000 claims description 16
- 238000012544 monitoring process Methods 0.000 claims description 10
- 238000005516 engineering process Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 231100000957 no side effect Toxicity 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2457—Query processing with adaptation to user needs
- G06F16/24578—Query processing with adaptation to user needs using ranking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种异步消息可靠投递和处理的方法和装置,本发明涉及大数据技术,该方法包括:通过消息生产者进行业务交易处理,确定业务数据和消息数据;将业务数据写入数据库业务表;业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。从流程上保证了异步消息的可靠投递和处理。
Description
技术领域
本发明涉及计算机数据处理技术领域,尤其涉及一种异步消息可靠投递和处理的方法和装置。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在IT系统设计和建设过程中,技术人员需要保证用户单次交易的原子性,即用户单次交易可能涉及多次数据库操作,需要保证如果交易成功,所有数据库操作全部成功,如果交易失败,不管交易进行到哪一步,都需要保证本次操作所有数据库操作全部回退至操作前的状态。现有成熟的商用数据库产品通常可以使用自带的机制保障用户单次交易所有数据库操作的事务一致性。
但对于采用消息队列中间件进行异步操作的系统来说,则需保证本地数据库操作与消息队列操作的原子性,即如果本地数据库操作成功,则消息应成功被投递至消息队列中;本地数据库操作失败,则消息不应被投递至消息队列中。
数据库与消息队列属于不同的中间件,无法通过中间件自身机制保证二者操作的原子性和一致性。
对于某些业务场景,一定不能出现本地数据库操作成功,但消息没有成功投递至消息队列中,或本地数据库操作失败,但消息被成功投递至消息队列中的情况。
因此,如何提供一种新的方案,其能够解决上述技术问题是本领域亟待解决的技术难题。
发明内容
本发明实施例提供一种异步消息可靠投递和处理的方法,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性,该方法包括:
通过消息生产者进行业务交易处理,确定业务数据和消息数据;
将业务数据写入数据库业务表;
业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
本发明实施例还提供一种异步消息可靠投递和处理的装置,包括:
业务数据和消息数据确定模块,用于通过消息生产者进行业务交易处理,确定业务数据和消息数据;
业务数据写入模块,用于将业务数据写入数据库业务表;
消息数据写入模块,用于业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
异步消息投递模块,用于消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
异步业务处理模块,用于消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
消息数据删除模块,用于异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述一种异步消息可靠投递和处理的方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述一种异步消息可靠投递和处理的方法的计算机程序。
本发明实施例提供的一种异步消息可靠投递和处理的方法和装置,包括:首先通过消息生产者进行业务交易处理,确定业务数据和消息数据;然后将业务数据写入数据库业务表;当业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;当消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;下一步消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;最后异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。本发明实施例通过将业务数据和消息数据这两个事务先转换成同一个数据库事务,保证消息不重不漏的记录在数据库中,随后通过异步处理,保证数据库中记录的信息可靠的投递至消息队列中后删除数据库中记录的消息数据,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性。同时通过应用异步处理的幂等性,保证消息即使重复投递也能够正确处理,确保了事务的最终一致性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例一种异步消息可靠投递和处理的方法示意图。
图2为现有技术中消息队列“事务消息”模式示意图。
图3为本发明实施例一种异步消息可靠投递和处理的方法的数据流程图。
图4为本发明实施例一种异步消息可靠投递和处理的方法的消息数据写入过程示意图。
图5为本发明实施例一种异步消息可靠投递和处理的方法的异步消息投递过程示意图。
图6为运行本发明实施的一种异步消息可靠投递和处理的方法的计算机装置示意图。
图7为本发明实施例一种异步消息可靠投递和处理的装置示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
本发明涉及大数据技术。图1为本发明实施例一种异步消息可靠投递和处理的方法示意图,如图1所示,本发明实施例提供一种异步消息可靠投递和处理的方法,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性,该方法包括:
步骤101:通过消息生产者进行业务交易处理,确定业务数据和消息数据;
步骤102:将业务数据写入数据库业务表;
步骤103:业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
步骤104:消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
步骤105:消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
步骤106:异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
本发明实施例提供的一种异步消息可靠投递和处理的方法,包括:首先通过消息生产者进行业务交易处理,确定业务数据和消息数据;然后将业务数据写入数据库业务表;当业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;当消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;下一步消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;最后异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。本发明实施例通过将业务数据和消息数据这两个事务先转换成同一个数据库事务,保证消息不重不漏的记录在数据库中,随后通过异步处理,保证数据库中记录的信息可靠的投递至消息队列中后删除数据库中记录的消息数据,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性。同时通过应用异步处理的幂等性,保证消息即使重复投递也能够正确处理,确保了事务的最终一致性。
在本发明实施例中,涉及的技术术语解释如下:
异步处理:在交易处理时,可将一次请求拆分成同步处理部分和异步处理部分,可将重要性、时效性较差的处理步骤转为异步处理,可以大大缩短交易响应时间,提升客户体验。
消息队列(MQ Sever):指在消息的传输过程中保存消息的容器。
事务:是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。事务应该具有4个属性:原子性、一致性、隔离性、持久性。
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。任意多次执行所产生的影响结果均与一次执行的影响结果相同。
图2为现有技术中消息队列“事务消息”模式示意图,如图2所示,目前主流消息队列提供了“事务消息”模式,主要过程包括:
1、业务处理开始时向消息队列(MQ Sever)投递“半消息(Half消息)”,即将半消息尝试投递至消息队列,半消息投递成功后,需要再次进行提交操作提交(commit)消息投递,或通过回滚动作(rollback)取消消息投递,在消息提交前,消费者不会看到此消息;
2、接收消息队列半消息投递成功反馈;
3、开始执行业务逻辑和本地数据库事务;
4、根据本地业务逻辑执行情况及数据库事务提交情况确认半消息的提交(commit)或回滚(rollback);
5、如果消息队列没有收到应用程序的提交(commit)或回滚(rollback)通知,还可通过回调函数查询本地事务执行结果(回调函数需应用自行实现);
6、回调函数检查本地事务状态;
7、应用程序根据本地数据库事务状态反馈消息队列提交(commit)或回滚(rollback)原消息。
当前技术中通过“半消息”模式实现的“事务消息”,可一定程度解决本地数据库事务与消息队列事务一致性的问题,但存在以下几点问题:
1、消息队列事务采用两阶段提交的方式,如果本地数据库事务执行成功,而消息队列的提交动作(图2中的第4步)失败,数据库事务已提交无法回滚,则会造成本地数据库事务与消息队列事务不一致的问题。
2、在某些特定的业务场景中,需根据本地事务的执行结果,确定是否需要向消息队列中投递消息,但模式需在数据库事务执行前向消息队列发送“半消息”,故这种模式无法适用全部业务场景。
图3为本发明实施例一种异步消息可靠投递和处理的方法的数据流程图,结合图3,为解决上述“半消息”模式存在的问题以及保证本地数据库操作与消息队列操作的原子性,具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,可以包括:
通过消息生产者进行业务交易处理,确定业务数据和消息数据;
将业务数据写入数据库业务表;
业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,通过消息生产者进行业务交易处理,确定业务数据和消息数据,包括:
消息生产者(provider)用于联机交易业务处理,通过消息生产者进行业务交易处理,确定业务数据和消息数据。在另一个实施例中,消息生产者用于联机交易业务处理,向数据库中写入业务数据及消息数据,同时产生异步消息投递至消息队列中。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,将业务数据写入数据库业务表,包括:
在数据库事务中建立数据库业务表,通过消息生产者将业务数据写入数据库业务表。
实施例中,业务数据写入的主要过程,包括:在数据库事务中建立数据库业务表,通过消息生产者将业务数据写入数据库业务表。数据库用于记录业务数据及消息数据,同时利用数据库自身机制可以保证业务数据与消息数据的事务一致性;
图4为本发明实施例一种异步消息可靠投递和处理的方法的消息数据写入过程示意图,如图4所示,具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表,包括:
步骤401:新建数据库消息表;其中,数据库消息表与数据库业务表在同一个数据库事务中;
步骤402:监测业务数据写入数据库业务表的过程,在业务数据写入成功后,产生业务数据写入成功反馈,返回至消息生产者;
步骤403:消息生产者在接收到业务数据写入成功反馈的基础上,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表。
实施例中,消息数据写入的主要过程,包括:首先,新建数据库消息表;其中,数据库消息表与数据库业务表在同一个数据库事务中;然后,监测业务数据写入数据库业务表的过程,在业务数据写入成功后,产生业务数据写入成功反馈,返回至消息生产者;最后,消息生产者在接收到业务数据写入成功反馈的基础上,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表。
消息生产者成功将业务数据写入数据库业务表后,将需要投递至消息队列的消息信息写入数据库消息表,写入业务数据表操作和写入消息表操作在同一个数据库事务中完成。在数据库中创建消息表时,要保证业务数据与消息数据在同一个数据库事务中。
将需要投递至消息队列中的消息记录至数据库消息表中,并将业务数据与消息数据在同一个数据库本地事务中完成,可以通过将业务数据和消息数据这两个事务先转换成同一个数据库事务,保证消息不重不漏的记录在数据库中,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,确保了业务流程的完整性。
图5为本发明实施例一种异步消息可靠投递和处理的方法的异步消息投递过程示意图,如图5所示,具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列,包括:
步骤501:监测消息数据写入数据库消息表的过程,在消息数据写入成功后,产生消息数据写入成功反馈,返回至消息生产者;
步骤502:消息生产者在接收到消息数据写入成功反馈的基础上,产生消息数据对应的异步消息投递至消息队列。
实施例中,异步消息投递的主要过程包括:首先监测消息数据写入数据库消息表的过程,在消息数据写入成功后,产生消息数据写入成功反馈,返回至消息生产者;然后消息生产者在接收到消息数据写入成功反馈的基础上,产生消息数据对应的异步消息投递至消息队列。
在以上业务数据写入和消息数据写入两步操作成功后,尝试将本次需要发送的消息投递至消息队列,由于本地数据库事务已提交,无论消息投递成功或者失败,都不会影响本地数据库事务的处理结果。
消息队列用于接收消息生产者产生的消息,并将其成功投递至消息消费者,用于参与业务流程的异步处理;
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性。
实施例中,消息消费者实时从消息队列中读取消息;然后将从队列中读取的待处理的消息进行异步业务处理。
消息消费者(consumer),用于读取消息队列中的异步消息,完成业务流程中异步处理的部分。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
实施例中,异步业务处理成功后删除数据库中消息数据。消费者异步业务处理须支持幂等,以保证重复异步处理结果的准确性。
通过异步处理,保证数据库中记录的信息可靠的投递至消息队列中后删除数据库中记录的消息数据,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性。同时通过应用异步处理的幂等性,保证消息即使重复投递也能够正确处理,确保了事务的最终一致性。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,该方法还包括:
利用批量程序扫描数据库消息表中未处理成功的消息数据,进行补偿处理;其中,补偿处理支持幂等性。
实施例中,为了确保消息能够不重不漏的处理,本发明实施例的方法还包括:利用批量程序扫描数据库消息表中未处理成功的消息数据,进行补偿处理;其中,补偿处理支持幂等性。
补偿处理支持幂等性,可以保证重复异步处理结果的准确性。
为确保消息能够不重不漏的处理,需引入失败重试机制,包括:
(1)生产者投递消息不成功时重试;
(2)消费者成功读取到消息但异步业务处理失败时重试异步业务处理;
消费者异步业务处理须支持幂等,以保证重复异步处理结果的准确性。
批量程序,用于批量异常处理(batch)、异常核对和处理,对于为成功投递至消息队列中的消息进行补偿处理。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,在数据库消息表中存在未处理成功的消息数据是由于异步消息投递至消息队列失败时,补偿处理,包括:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据对应的异步消息重新投递至消息队列。
实施例中,在异步消息投递至消息队列失败时,补偿处理的主要过程,包括:利用批量程序获取未处理成功的消息数据;通过批量程序将未处理成功的消息数据对应的异步消息重新投递至消息队列。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的方法时,在一个实施例中,在数据库消息表中存在未处理成功的消息数据是由于消息数据从数据库消息表中删除失败时,补偿处理,包括:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据重复处理,直至未处理成功的消息数据从消息表中删除。
实施例中,在消息数据从数据库消息表中删除失败时,补偿处理的主要过程,包括:利用批量程序获取未处理成功的消息数据;通过批量程序将未处理成功的消息数据重复处理,直至未处理成功的消息数据从消息表中删除。
实施中,需要通过批量程序处理的异常场景,包括:
1、由于业务数据写入和消息数据写入为同一个数据库本地事务,则只可能出现同时成功或同时失败的情况,如果同时成功,返回处理成功,待处理的消息信息成功存储在数据库中;若同时失败,返回处理失败,数据库未发生变化;
2、异步消息投递至消息队列时,如果处理失败,则消息表中的消息数据交由第批量程序统一处理;
3、消息数据从数据库消息表中删除时,如果处理失败,则会出现异步业务处理完成,但消息表数据仍然存在,批量程序将对该条消息重复处理,由于业务异步处理设计上支持幂等操作,故重复处理后得到结果相同;
本发明实施例通过批量任务对当日流程中出现异常的少量交易进行补偿和善后处理。补偿处理并非每次交易都需执行,仅对流程中出现异常的少量交易进行补偿和善后处理。
本发明通过将两个事务先转换成同一个数据库事务,保证消息不重不漏的记录在数据库中,随后通过异步处理,保证数据库中记录的信息可靠的投递至消息队列中后删除数据库记录,再通过应用的幂等性,保证消息即使重复投递也能够正确处理,确保了事务的最终一致性。
如图2所示,本发明实施的一种异步消息可靠投递和处理的方法的数据流程,包括:
1、消息生产者进行业务处理后,将业务数据写入数据库;
2、消息生产者成功将业务数据写入数据库业务表后,将需要投递至消息队列的消息信息写入数据库消息表,写入业务数据表操作和写入消息表操作在同一个数据库事务中完成;
3、以上两步操作成功后尝试将本次需要发送的消息投递至消息队列,由于本地数据库事务已提交,无论消息投递成功或者失败,都不会影响本地数据库事务的处理结果;4、消息消费者实时从消息队列中读取消息;
5、将从队列中读取的待处理的消息进行异步业务处理;
6、异步业务处理成功后删除数据库中消息数据;
7、由批量程序定时启动扫描数据库中消息表未成功处理的数据(包括2-6步中任一步骤发生的异常),并尝试将这部分数据进行异步业务处理。
其中,第7步的异常场景分析,包括:
(1)、由于1-2步为同一个数据库本地事务,则只可能出现同时成功或同时失败的情况,如果同时成功,返回处理成功,待处理的消息信息成功存储在数据库中;若同时失败,返回处理失败,数据库未发生变化;
(2)、第3-5步如果处理失败,则消息表中的消息数据交由第7步批量程序统一处理;
(3)、第6步如果处理失败,则会出现异步业务处理完成,但消息表数据仍然存在,第7步批量程序将对该条消息重复处理,由于业务异步处理设计上支持幂等操作,故重复处理后得到结果相同;
第7步并非每次交易都需执行,仅对流程中出现异常的少量交易进行补偿和善后处理。
为实现上述本发明实施的一种异步消息可靠投递和处理的方法的数据流程,需要包括:
1、消息生产者(provider):用于联机交易业务处理,向数据库中写入业务数据及消息数据,同时产生异步消息投递至消息队列中;
2、数据库:用于记录业务数据及消息数据,同时利用数据库自身机制保证业务数据与消息数据的事务一致性;
3、消息队列:用于接收消息生产者产生的消息,并将其成功投递至消息消费者,用于业务流程的异步处理;
4、消息消费者(consumer):读取消息队列中的异步消息,完成业务流程中异步处理的部分;
5、批量异常处理(batch):用于异常核对和处理,对于为成功投递至消息队列中的消息进行补偿处理。
为实现上述本发明实施的一种异步消息可靠投递和处理的方法的数据流程,本领域技术人员在开发时,需要关注的技术创新难点在于:
1、需在数据库中创建消息表,要保证业务数据与消息数据在同一个数据库事务中。
2、为确保消息能够不重不漏的处理,需引入失败重试机制,
(1)生产者投递消息不成功时重试;
(2)消费者成功读取到消息但异步业务处理失败时重试异步业务处理;
3、消费者异步业务处理须支持幂等,以保证重复异步处理结果的准确性。
本领域技术人员的主要实现过程,包括:
1、将需要投递至消息队列中的消息记录至数据库消息表中,并将业务数据与消息数据在同一个数据库本地事务中完成;
2、通过批量任务对当日流程中出现异常的少量交易进行补偿和善后处理。
本发明从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性。
本发明通过将两个事务先转换成同一个数据库事务,保证消息不重不漏的记录在数据库中,随后通过异步处理,保证数据库中记录的信息可靠的投递至消息队列中后删除数据库记录,再通过应用的幂等性,保证消息即使重复投递也能够正确处理,确保了事务的最终一致性。
图6为运行本发明实施的一种异步消息可靠投递和处理的方法的计算机装置示意图,如图7所示,本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述一种异步消息可靠投递和处理的方法。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有执行实现上述一种异步消息可靠投递和处理的方法的计算机程序。
本发明实施例中还提供了一种异步消息可靠投递和处理的装置,如下面的实施例所述。由于该装置解决问题的原理与一种异步消息可靠投递和处理的方法相似,因此该装置的实施可以参见一种异步消息可靠投递和处理的方法的实施,重复之处不再赘述。
图7为本发明实施例一种异步消息可靠投递和处理的装置示意图,如图7所示,本发明实施例还提供一种异步消息可靠投递和处理的装置,具体实施时可以包括:
业务数据和消息数据确定模块701,用于通过消息生产者进行业务交易处理,确定业务数据和消息数据;
业务数据写入模块702,用于将业务数据写入数据库业务表;
消息数据写入模块703,用于业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
异步消息投递模块704,用于消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
异步业务处理模块705,用于消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
消息数据删除模块706,用于异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的装置时,在一个实施例中,业务数据写入模块,具体用于:
在数据库事务中建立数据库业务表,通过消息生产者将业务数据写入数据库业务表。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的装置时,在一个实施例中,消息数据写入模块,具体用于:
新建数据库消息表;其中,数据库消息表与数据库业务表在同一个数据库事务中;
监测业务数据写入数据库业务表的过程,在业务数据写入成功后,产生业务数据写入成功反馈,返回至消息生产者;
消息生产者在接收到业务数据写入成功反馈的基础上,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的装置时,在一个实施例中,异步消息投递模块,具体用于:
监测消息数据写入数据库消息表的过程,在消息数据写入成功后,产生消息数据写入成功反馈,返回至消息生产者;
消息生产者在接收到消息数据写入成功反馈的基础上,产生消息数据对应的异步消息投递至消息队列。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的装置时,在一个实施例中,还包括批量异常处理模块,用于:
利用批量程序扫描数据库消息表中未处理成功的消息数据,进行补偿处理;其中,补偿处理支持幂等性。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的装置时,在一个实施例中,在数据库消息表中存在未处理成功的消息数据是由于异步消息投递至消息队列失败时,批量异常处理模块,具体用于:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据对应的异步消息重新投递至消息队列。
具体实施本发明实施例提供的一种异步消息可靠投递和处理的装置时,在一个实施例中,在数据库消息表中存在未处理成功的消息数据是由于消息数据从数据库消息表中删除失败时,批量异常处理模块,具体用于:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据重复处理,直至未处理成功的消息数据从消息表中删除。
综上,本发明实施例提供的一种异步消息可靠投递和处理的方法和装置,包括:首先通过消息生产者进行业务交易处理,确定业务数据和消息数据;然后将业务数据写入数据库业务表;当业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;当消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;下一步消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;最后异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。本发明实施例通过将业务数据和消息数据这两个事务先转换成同一个数据库事务,保证消息不重不漏的记录在数据库中,随后通过异步处理,保证数据库中记录的信息可靠的投递至消息队列中后删除数据库中记录的消息数据,从流程上保证了异步消息的可靠投递和处理,严格的保证了数据库本地事务与异步消息投递的事务一致性,保证了异步业务处理流程中,异步消息不丢失,异步处理可靠完成,确保了业务流程的完整性。同时通过应用异步处理的幂等性,保证消息即使重复投递也能够正确处理,确保了事务的最终一致性。进一步的,消费者异步业务处理和补偿处理支持幂等性,可以保证重复异步处理结果的准确性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (16)
1.一种异步消息可靠投递和处理的方法,其特征在于,包括:
通过消息生产者进行业务交易处理,确定业务数据和消息数据;
将业务数据写入数据库业务表;
业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
2.如权利要求1所述的方法,其特征在于,将业务数据写入数据库业务表,包括:
在数据库事务中建立数据库业务表,通过消息生产者将业务数据写入数据库业务表。
3.如权利要求1所述的方法,其特征在于,业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表,包括:
新建数据库消息表;其中,数据库消息表与数据库业务表在同一个数据库事务中;
监测业务数据写入数据库业务表的过程,在业务数据写入成功后,产生业务数据写入成功反馈,返回至消息生产者;
消息生产者在接收到业务数据写入成功反馈的基础上,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表。
4.如权利要求1所述的方法,其特征在于,消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列,包括:
监测消息数据写入数据库消息表的过程,在消息数据写入成功后,产生消息数据写入成功反馈,返回至消息生产者;
消息生产者在接收到消息数据写入成功反馈的基础上,产生消息数据对应的异步消息投递至消息队列。
5.如权利要求1所述的方法,其特征在于,还包括:
利用批量程序扫描数据库消息表中未处理成功的消息数据,进行补偿处理;其中,补偿处理支持幂等性。
6.如权利要求5所述的方法,其特征在于,
在数据库消息表中存在未处理成功的消息数据是由于异步消息投递至消息队列失败时,补偿处理,包括:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据对应的异步消息重新投递至消息队列。
7.如权利要求5所述的方法,其特征在于,
在数据库消息表中存在未处理成功的消息数据是由于消息数据从数据库消息表中删除失败时,补偿处理,包括:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据重复处理,直至未处理成功的消息数据从消息表中删除。
8.一种异步消息可靠投递和处理的装置,其特征在于,包括:
业务数据和消息数据确定模块,用于通过消息生产者进行业务交易处理,确定业务数据和消息数据;
业务数据写入模块,用于将业务数据写入数据库业务表;
消息数据写入模块,用于业务数据写入成功后,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表;
异步消息投递模块,用于消息数据写入成功后,通过消息生产者产生消息数据对应的异步消息投递至消息队列;
异步业务处理模块,用于消息消费者实时从消息队列中读取异步消息,进行异步业务处理;其中,异步业务处理支持幂等性;
消息数据删除模块,用于异步业务处理成功后,将异步消息对应的消息数据从数据库消息表中删除。
9.如权利要求8所述的装置,其特征在于,业务数据写入模块,具体用于:
在数据库事务中建立数据库业务表,通过消息生产者将业务数据写入数据库业务表。
10.如权利要求8所述的装置,其特征在于,消息数据写入模块,具体用于:
新建数据库消息表;其中,数据库消息表与数据库业务表在同一个数据库事务中;
监测业务数据写入数据库业务表的过程,在业务数据写入成功后,产生业务数据写入成功反馈,返回至消息生产者;
消息生产者在接收到业务数据写入成功反馈的基础上,将消息数据写入与数据库业务表在同一个数据库事务中的数据库消息表。
11.如权利要求8所述的装置,其特征在于,异步消息投递模块,具体用于:
监测消息数据写入数据库消息表的过程,在消息数据写入成功后,产生消息数据写入成功反馈,返回至消息生产者;
消息生产者在接收到消息数据写入成功反馈的基础上,产生消息数据对应的异步消息投递至消息队列。
12.如权利要求8所述的装置,其特征在于,还包括批量异常处理模块,用于:
利用批量程序扫描数据库消息表中未处理成功的消息数据,进行补偿处理;其中,补偿处理支持幂等性。
13.如权利要求12所述的装置,其特征在于,
在数据库消息表中存在未处理成功的消息数据是由于异步消息投递至消息队列失败时,批量异常处理模块,具体用于:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据对应的异步消息重新投递至消息队列。
14.如权利要求12所述的装置,其特征在于,
在数据库消息表中存在未处理成功的消息数据是由于消息数据从数据库消息表中删除失败时,批量异常处理模块,具体用于:
利用批量程序获取未处理成功的消息数据;
通过批量程序将未处理成功的消息数据重复处理,直至未处理成功的消息数据从消息表中删除。
15.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行实现权利要求1至7任一项所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110489210.1A CN113094362B (zh) | 2021-04-30 | 2021-04-30 | 一种异步消息可靠投递和处理的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110489210.1A CN113094362B (zh) | 2021-04-30 | 2021-04-30 | 一种异步消息可靠投递和处理的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113094362A true CN113094362A (zh) | 2021-07-09 |
CN113094362B CN113094362B (zh) | 2024-04-16 |
Family
ID=76681696
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110489210.1A Active CN113094362B (zh) | 2021-04-30 | 2021-04-30 | 一种异步消息可靠投递和处理的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113094362B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114095468A (zh) * | 2021-11-19 | 2022-02-25 | 中国银行股份有限公司 | 消息中间件系统、邮局系统及消息收发方法 |
CN114116262A (zh) * | 2021-12-02 | 2022-03-01 | 北京宇信科技集团股份有限公司 | 一种分布式异步数据通讯的处理方法、装置、介质和设备 |
CN114443773A (zh) * | 2022-01-30 | 2022-05-06 | 中国农业银行股份有限公司 | 一种分布式系统数据同步方法、装置、设备和存储介质 |
CN117290122A (zh) * | 2023-02-28 | 2023-12-26 | 北京荣大科技股份有限公司 | 一种基于Kafka的多环境有序性生产消费的方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040240444A1 (en) * | 2003-05-29 | 2004-12-02 | Matthews Daniel James | System and method for managing transactions in a messaging system |
CN102611642A (zh) * | 2012-02-27 | 2012-07-25 | 杭州闪亮科技有限公司 | 处理异步消息的系统及其发送消息、监听处理任务的方法 |
CN105512244A (zh) * | 2015-11-30 | 2016-04-20 | 北京京东尚科信息技术有限公司 | 基于消息队列实现数据库事务处理的方法及装置 |
CN106777026A (zh) * | 2016-12-08 | 2017-05-31 | 用友网络科技股份有限公司 | 支持微服务架构事务最终一致性的方法、装置及系统 |
CN108965457A (zh) * | 2018-08-02 | 2018-12-07 | 郑州云海信息技术有限公司 | 一种分布式集群系统的消息传递方法、装置、设备及介质 |
CN110851248A (zh) * | 2019-10-12 | 2020-02-28 | 中国平安财产保险股份有限公司 | 异步任务数据处理方法、装置及计算机可读存储介质 |
CN111143093A (zh) * | 2019-12-31 | 2020-05-12 | 中国银行股份有限公司 | 异步消息分布式处理方法、装置、设备及存储介质 |
CN111464628A (zh) * | 2020-03-31 | 2020-07-28 | 中国工商银行股份有限公司 | 多路复用异步处理系统及方法 |
CN112667414A (zh) * | 2020-12-23 | 2021-04-16 | 平安普惠企业管理有限公司 | 基于消息队列的消息消费方法、装置、计算机设备及介质 |
-
2021
- 2021-04-30 CN CN202110489210.1A patent/CN113094362B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040240444A1 (en) * | 2003-05-29 | 2004-12-02 | Matthews Daniel James | System and method for managing transactions in a messaging system |
CN102611642A (zh) * | 2012-02-27 | 2012-07-25 | 杭州闪亮科技有限公司 | 处理异步消息的系统及其发送消息、监听处理任务的方法 |
CN105512244A (zh) * | 2015-11-30 | 2016-04-20 | 北京京东尚科信息技术有限公司 | 基于消息队列实现数据库事务处理的方法及装置 |
CN106777026A (zh) * | 2016-12-08 | 2017-05-31 | 用友网络科技股份有限公司 | 支持微服务架构事务最终一致性的方法、装置及系统 |
CN108965457A (zh) * | 2018-08-02 | 2018-12-07 | 郑州云海信息技术有限公司 | 一种分布式集群系统的消息传递方法、装置、设备及介质 |
CN110851248A (zh) * | 2019-10-12 | 2020-02-28 | 中国平安财产保险股份有限公司 | 异步任务数据处理方法、装置及计算机可读存储介质 |
CN111143093A (zh) * | 2019-12-31 | 2020-05-12 | 中国银行股份有限公司 | 异步消息分布式处理方法、装置、设备及存储介质 |
CN111464628A (zh) * | 2020-03-31 | 2020-07-28 | 中国工商银行股份有限公司 | 多路复用异步处理系统及方法 |
CN112667414A (zh) * | 2020-12-23 | 2021-04-16 | 平安普惠企业管理有限公司 | 基于消息队列的消息消费方法、装置、计算机设备及介质 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114095468A (zh) * | 2021-11-19 | 2022-02-25 | 中国银行股份有限公司 | 消息中间件系统、邮局系统及消息收发方法 |
CN114095468B (zh) * | 2021-11-19 | 2023-04-07 | 中国银行股份有限公司 | 消息中间件系统、邮局系统及消息收发方法 |
CN114116262A (zh) * | 2021-12-02 | 2022-03-01 | 北京宇信科技集团股份有限公司 | 一种分布式异步数据通讯的处理方法、装置、介质和设备 |
CN114443773A (zh) * | 2022-01-30 | 2022-05-06 | 中国农业银行股份有限公司 | 一种分布式系统数据同步方法、装置、设备和存储介质 |
CN117290122A (zh) * | 2023-02-28 | 2023-12-26 | 北京荣大科技股份有限公司 | 一种基于Kafka的多环境有序性生产消费的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113094362B (zh) | 2024-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113094362B (zh) | 一种异步消息可靠投递和处理的方法和装置 | |
CN100435101C (zh) | 在软件环境中用于保持资源完整性的装置和方法 | |
TW522320B (en) | Apparatus and method for recovering a failed database data set | |
EP2600246B1 (en) | Batch processing of business objects | |
CN112835688A (zh) | 分布式事务处理方法、设备及存储介质 | |
CN110888718A (zh) | 分布式事务的实现方法及装置 | |
US10956203B2 (en) | Quality assurance for a context driven hybrid transaction processing system | |
CN104094228A (zh) | 用于支持基于二阶段提交调用的严格定序的事务恢复的系统和方法 | |
CN112148436B (zh) | 去中心化的tcc事务管理方法、装置、设备及系统 | |
US20230315713A1 (en) | Operation request processing method, apparatus, device, readable storage medium, and system | |
CN115220876A (zh) | 虚拟资源创建方法、装置、程序产品、介质及电子设备 | |
CN105938446B (zh) | 基于rdma和硬件事务性内存支持的数据复制容错方法 | |
CN112765126B (zh) | 数据库事务的管理方法、装置、计算机设备和存储介质 | |
CN113256276A (zh) | 一种基于订单回调的支付状态维护方法及系统 | |
CN111738728A (zh) | 交易补偿方法及装置 | |
US20230195582A1 (en) | Rolling back a database transaction | |
CN110874713A (zh) | 业务状态管理方法与装置 | |
CN113742034A (zh) | 事件处理方法与装置、计算机可读存储介质、电子设备 | |
CN115248827A (zh) | 分布式事务提交方法及装置 | |
US7421696B2 (en) | Methods and systems for managing successful completion of a network of processes | |
CN114510337B (zh) | 任务执行方法、系统及计算机可读存储介质 | |
CN114546629B (zh) | 任务执行系统、方法、服务器及计算机可读存储介质 | |
CN115048395A (zh) | 一种内存数据合并更新数据库库存的方法及其系统 | |
CN107944988A (zh) | 支持无退款情况对复杂订单的管理装置及管理方法 | |
CN113010566B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |