掌桥专利:专业的专利平台
掌桥专利
首页

一种异步消息可靠投递和处理的方法和装置

文献发布时间:2023-06-19 11:45:49


一种异步消息可靠投递和处理的方法和装置

技术领域

本发明涉及计算机数据处理技术领域,尤其涉及一种异步消息可靠投递和处理的方法和装置。

背景技术

本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

在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、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种异步消息可靠投递和处理的方法和装置
  • 一种异步消息处理方法、装置、电子设备及存储介质
技术分类

06120113047661